From 05b73001a297f89a9c5fcde197948eec9748a7bc Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Sat, 9 Apr 2016 11:00:06 +0200 Subject: [PATCH 001/221] started adding support for Strings (with the CVC4 backend) --- src/solvers/smt2/smt2_conv.cpp | 255 ++++++++++++++++++++++++++++++--- src/solvers/smt2/smt2_conv.h | 35 +++++ 2 files changed, 272 insertions(+), 18 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 41c0e933d67..0c83930bd04 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -7,6 +7,7 @@ Author: Daniel Kroening, kroening@kroening.com \*******************************************************************/ #include +#include #include #include @@ -123,6 +124,21 @@ void smt2_convt::write_header() // set-logic should come after setting options if(emit_set_logic && !logic.empty()) out << "(set-logic " << logic << ")" << "\n"; + + if (solver == CVC4 && use_strings) { + out << "(define-fun ubv_to_int ((?x (_ BitVec " + << string_length_width << "))) " + << "Int "; + out << "(let ((bit0 (_ bv0 1))) (+ "; + mp_integer bit; + for (size_t i = 0; i < string_length_width; ++i) { + bit.setPower2(i); + out << "(ite (= ((_ extract " << i << " " << i << ") ?x) bit0) 0 " + << bit << ") "; + } + out << "0))" + << ")\n\n"; + } } /*******************************************************************\ @@ -2006,6 +2022,10 @@ void smt2_convt::convert_expr(const exprt &expr) { UNEXPECTEDCASE("smt2_convt::convert_expr: `"+expr.id_string()+"' is not yet supported"); } + else if(expr.id()==ID_function_application) + { + convert_uninterpreted_function(expr); + } else UNEXPECTEDCASE("smt2_convt::convert_expr: `"+expr.id_string()+"' is unsupported"); } @@ -4441,7 +4461,157 @@ void smt2_convt::convert_overflow(const exprt &expr) UNREACHABLE; } -/*******************************************************************\ + +void smt2_convt::convert_uninterpreted_function(const exprt &expr) +{ + const function_application_exprt &f = to_function_application_expr(expr); + const exprt &name = f.function(); + + // check if this is something we recognize + if (name.id() == ID_symbol) { + const irep_idt &id=to_symbol_expr(name).get_identifier(); + if (use_strings) { + if (id == string_literal_func) { + return convert_string_literal(f); + } else if (id == string_char_at_func) { + return convert_string_char_at(f); + } else if (id == string_length_func) { + return convert_string_length(f); + } else if (id == string_concat_func) { + return convert_string_concat(f); + } else if (id == string_substring_func) { + return convert_string_substring(f); + } else if (id == string_is_prefix_func) { + return convert_string_is_prefix(f); + } else if (id == string_is_suffix_func) { + return convert_string_is_suffix(f); + } + } + } + + UNEXPECTEDCASE("unsupported uninterpreted function: " + name.id_string()); +} + + +void smt2_convt::convert_string_literal(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 1) { + UNEXPECTEDCASE("args mismatch in string_literal"); + } + const exprt &arg = args[0]; + if (arg.operands().size() == 1 && + arg.operands()[0].operands().size() == 1 && + arg.operands()[0].operands()[0].operands().size() == 2 && + arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant) { + const exprt &s = arg.operands()[0].operands()[0].operands()[0]; + if (defined_expressions.find(s) != defined_expressions.end()) { + // TODO -- handle better (also quoting) + out << '"' << defined_expressions[s] << '"'; + return; + } + } + UNEXPECTEDCASE("arg of string_literal not found"); +} + + +void smt2_convt::convert_string_char_at(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_char_at"); + } + out << "(str.at "; + convert_expr(args[0]); + out << " (ubv_to_int "; + typecast_exprt pos = + typecast_exprt(args[1], unsignedbv_typet(string_length_width)); + convert_expr(pos); + out << "))"; +} + + +void smt2_convt::convert_string_concat(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_concat"); + } + out << "(str.++ "; + convert_expr(args[0]); + out << " "; + convert_expr(args[1]); + out << ")"; +} + + +void smt2_convt::convert_string_substring(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 3) { + UNEXPECTEDCASE("args mismatch in string_substring"); + } + out << "(str.substr "; + convert_expr(args[0]); + out << " "; + out << "(ubv_to_int "; + typecast_exprt pi = + typecast_exprt(args[1], unsignedbv_typet(string_length_width)); + convert_typecast(pi); + out << ")"; + out << " "; + out << "(ubv_to_int "; + typecast_exprt pj = + typecast_exprt(args[2], unsignedbv_typet(string_length_width)); + convert_typecast(pj); + out << ")"; + out << ")"; +} + + +void smt2_convt::convert_string_is_prefix(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_is_prefix"); + } + out << "(str.prefixof "; + convert_expr(args[0]); + out << " "; + convert_expr(args[1]); + out << ")"; +} + + +void smt2_convt::convert_string_is_suffix(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_is_suffix"); + } + out << "(str.suffixof "; + convert_expr(args[0]); + out << " "; + convert_expr(args[1]); + out << ")"; +} + + +void smt2_convt::convert_string_length(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 1) { + UNEXPECTEDCASE("args mismatch in string_length"); + } + if (string_lengths.find(f) != string_lengths.end()) { + out << string_lengths[f]; + } else { + UNEXPECTEDCASE("string_length not found"); + } +} + + +/******************************************************************* \ Function: smt2_convt::set_to @@ -4642,26 +4812,31 @@ void smt2_convt::find_symbols(const exprt &expr) { if(defined_expressions.find(expr)==defined_expressions.end()) { - // introduce a temporary array. - exprt tmp=to_string_constant(expr).to_array_expr(); - const array_typet &array_type=to_array_type(tmp.type()); + if (use_strings) { + irep_idt id = to_string_constant(expr).get_value(); + defined_expressions[expr] = id; + } else { + // introduce a temporary array. + exprt tmp=to_string_constant(expr).to_array_expr(); + const array_typet &array_type=to_array_type(tmp.type()); + + irep_idt id="string."+i2string(defined_expressions.size()); + out << "; the following is a substitute for a string" << "\n"; + out << "(declare-fun " << id << " () "; + convert_type(array_type); + out << ")" << "\n"; - irep_idt id="string."+i2string(defined_expressions.size()); - out << "; the following is a substitute for a string" << "\n"; - out << "(declare-fun " << id << " () "; - convert_type(array_type); - out << ")" << "\n"; + for(std::size_t i=0; i boolean_assignment; + + // string support + irep_idt string_literal_func; + irep_idt string_length_func; + irep_idt string_char_at_func; + irep_idt string_concat_func; + irep_idt string_substring_func; + irep_idt string_is_prefix_func; + irep_idt string_is_suffix_func; + size_t string_length_width; + + bool is_string_type(const typet &type); + void convert_string_literal(const function_application_exprt &f); + void convert_string_length(const function_application_exprt &f); + void convert_string_concat(const function_application_exprt &f); + void convert_string_char_at(const function_application_exprt &f); + void convert_string_substring(const function_application_exprt &f); + void convert_string_is_prefix(const function_application_exprt &f); + void convert_string_is_suffix(const function_application_exprt &f); + + defined_expressionst string_lengths; }; #endif From 96339636ef48fa0fae112b4af3db8a0b4c9d171c Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 15 Apr 2016 17:30:49 +0200 Subject: [PATCH 002/221] improved string support in smt2 backend - added more operations to the SMT-LIB string theory - added an alternative backend using quantifiers and arrays instead of the string theory still work in progress --- src/solvers/smt2/smt2_conv.cpp | 425 +++++++++++++++++++++++++++------ src/solvers/smt2/smt2_conv.h | 28 ++- 2 files changed, 377 insertions(+), 76 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 0c83930bd04..672f0b9607f 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -125,9 +125,12 @@ void smt2_convt::write_header() if(emit_set_logic && !logic.empty()) out << "(set-logic " << logic << ")" << "\n"; - if (solver == CVC4 && use_strings) { - out << "(define-fun ubv_to_int ((?x (_ BitVec " - << string_length_width << "))) " + if (strings_mode == STRINGS_SMTLIB) { + out << "(define-sort cprover.String () String)\n"; + out << "(define-sort cprover.Char () String)\n"; + out << "(define-sort cprover.Pos () (_ BitVec " + << string_length_width << "))\n"; + out << "(define-fun cprover.ubv_to_int ((?x cprover.Pos)) " << "Int "; out << "(let ((bit0 (_ bv0 1))) (+ "; mp_integer bit; @@ -138,6 +141,12 @@ void smt2_convt::write_header() } out << "0))" << ")\n\n"; + } else if (strings_mode == STRINGS_QARRAY) { + out << "(define-sort cprover.Char () (_ BitVec 8))\n" + << "(define-sort cprover.Pos () (_ BitVec " + << string_length_width << "))\n" + << "(define-sort cprover.String () (Array cprover.Pos cprover.Char))\n"; + out << "(declare-fun cprover.str.len (cprover.String) cprover.Pos)\n"; } } @@ -2024,7 +2033,12 @@ void smt2_convt::convert_expr(const exprt &expr) } else if(expr.id()==ID_function_application) { - convert_uninterpreted_function(expr); + defined_expressionst::const_iterator it=defined_expressions.find(expr); + if (it != defined_expressions.end()) { + out << it->second; + } else { + convert_uninterpreted_function(expr); + } } else UNEXPECTEDCASE("smt2_convt::convert_expr: `"+expr.id_string()+"' is unsupported"); @@ -4470,9 +4484,9 @@ void smt2_convt::convert_uninterpreted_function(const exprt &expr) // check if this is something we recognize if (name.id() == ID_symbol) { const irep_idt &id=to_symbol_expr(name).get_identifier(); - if (use_strings) { - if (id == string_literal_func) { - return convert_string_literal(f); + if (strings_mode != STRINGS_OFF) { + if (id == string_equal_func) { + return convert_string_equal(f); } else if (id == string_char_at_func) { return convert_string_char_at(f); } else if (id == string_length_func) { @@ -4493,25 +4507,17 @@ void smt2_convt::convert_uninterpreted_function(const exprt &expr) } -void smt2_convt::convert_string_literal(const function_application_exprt &f) +void smt2_convt::convert_string_equal(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - if (args.size() != 1) { - UNEXPECTEDCASE("args mismatch in string_literal"); - } - const exprt &arg = args[0]; - if (arg.operands().size() == 1 && - arg.operands()[0].operands().size() == 1 && - arg.operands()[0].operands()[0].operands().size() == 2 && - arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant) { - const exprt &s = arg.operands()[0].operands()[0].operands()[0]; - if (defined_expressions.find(s) != defined_expressions.end()) { - // TODO -- handle better (also quoting) - out << '"' << defined_expressions[s] << '"'; - return; - } + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_equal"); } - UNEXPECTEDCASE("arg of string_literal not found"); + out << "(= "; + convert_expr(args[0]); + out << " "; + convert_expr(args[1]); + out << ")"; } @@ -4521,13 +4527,23 @@ void smt2_convt::convert_string_char_at(const function_application_exprt &f) if (args.size() != 2) { UNEXPECTEDCASE("args mismatch in string_char_at"); } - out << "(str.at "; - convert_expr(args[0]); - out << " (ubv_to_int "; - typecast_exprt pos = - typecast_exprt(args[1], unsignedbv_typet(string_length_width)); - convert_expr(pos); - out << "))"; + if (strings_mode == STRINGS_SMTLIB) { + out << "(str.at "; + convert_expr(args[0]); + out << " (cprover.ubv_to_int "; + typecast_exprt pos = + typecast_exprt(args[1], unsignedbv_typet(string_length_width)); + convert_expr(pos); + out << "))"; + } else { + out << "(select "; + convert_expr(args[0]); + out << " "; + typecast_exprt pos = + typecast_exprt(args[1], unsignedbv_typet(string_length_width)); + convert_expr(pos); + out << ")"; + } } @@ -4551,21 +4567,20 @@ void smt2_convt::convert_string_substring(const function_application_exprt &f) if (args.size() != 3) { UNEXPECTEDCASE("args mismatch in string_substring"); } - out << "(str.substr "; - convert_expr(args[0]); - out << " "; - out << "(ubv_to_int "; + out << "(let ((?i (cprover.ubv_to_int "; typecast_exprt pi = typecast_exprt(args[1], unsignedbv_typet(string_length_width)); convert_typecast(pi); - out << ")"; - out << " "; - out << "(ubv_to_int "; + out << ")) (?j "; + out << "(cprover.ubv_to_int "; typecast_exprt pj = typecast_exprt(args[2], unsignedbv_typet(string_length_width)); convert_typecast(pj); - out << ")"; - out << ")"; + out << "))) "; + out << "(str.substr "; + convert_expr(args[0]); + out << " "; + out << "?i (+ ?i ?j))"; } @@ -4603,10 +4618,16 @@ void smt2_convt::convert_string_length(const function_application_exprt &f) if (args.size() != 1) { UNEXPECTEDCASE("args mismatch in string_length"); } - if (string_lengths.find(f) != string_lengths.end()) { - out << string_lengths[f]; + if (strings_mode == STRINGS_SMTLIB) { + if (string_lengths.find(f) != string_lengths.end()) { + out << string_lengths[f]; + } else { + UNEXPECTEDCASE("string_length not found"); + } } else { - UNEXPECTEDCASE("string_length not found"); + out << "(cprover.str.len "; + convert_expr(args[0]); + out << ")"; } } @@ -4812,10 +4833,7 @@ void smt2_convt::find_symbols(const exprt &expr) { if(defined_expressions.find(expr)==defined_expressions.end()) { - if (use_strings) { - irep_idt id = to_string_constant(expr).get_value(); - defined_expressions[expr] = id; - } else { + if (strings_mode == STRINGS_OFF) { // introduce a temporary array. exprt tmp=to_string_constant(expr).to_array_expr(); const array_typet &array_type=to_array_type(tmp.type()); @@ -4918,38 +4936,291 @@ void smt2_convt::find_symbols(const exprt &expr) } } - if (use_strings && expr.id() == ID_function_application) { + if (strings_mode != STRINGS_OFF && expr.id() == ID_function_application) { const function_application_exprt &f = to_function_application_expr(expr); const exprt &name = f.function(); if (name.id() == ID_symbol) { - const irep_idt &id=to_symbol_expr(name).get_identifier(); - if (id == string_length_func && - string_lengths.find(expr) == string_lengths.end()) { - const typet &type = f.type(); - if (type.id()==ID_unsignedbv || - type.id()==ID_signedbv) { - std::size_t w=to_bitvector_type(type).get_width(); - const function_application_exprt::argumentst &args = f.arguments(); - irep_idt id="string_length."+i2string(string_lengths.size()); - typecast_exprt len = typecast_exprt( - symbol_exprt(id), unsignedbv_typet(string_length_width)); - out << "(declare-fun " << id << " () "; - convert_type(expr.type()); - out << ")\n"; - out << "(assert (= (ubv_to_int "; - convert_typecast(len); - out << ") (str.len "; - convert_expr(args[0]); - out << ")))\n"; - string_lengths[expr] = id; - } else { - UNEXPECTEDCASE("return type of string_length is not a bit-vector"); + const irep_idt &id = to_symbol_expr(name).get_identifier(); + const function_application_exprt::argumentst &args = f.arguments(); + + if (id == string_literal_func) { + return define_string_literal(f); + } else if (id == char_literal_func) { + return define_char_literal(f); + } else if (id == string_char_set_func) { + return define_string_char_set(f); + } + + if (strings_mode == STRINGS_SMTLIB) { + if (id == string_length_func && + string_lengths.find(expr) == string_lengths.end()) { + const typet &type = f.type(); + if (type.id()==ID_unsignedbv || + type.id()==ID_signedbv) { + std::size_t w=to_bitvector_type(type).get_width(); + irep_idt id="string_length."+i2string(string_lengths.size()); + typecast_exprt len = typecast_exprt( + symbol_exprt(id), unsignedbv_typet(string_length_width)); + out << "(declare-fun " << id << " () "; + convert_type(expr.type()); + out << ")\n"; + out << "(assert (= (cprover.ubv_to_int "; + convert_typecast(len); + out << ") (str.len "; + convert_expr(args[0]); + out << ")))\n"; + string_lengths[expr] = id; + } else { + UNEXPECTEDCASE("return type of string_length is not a bit-vector"); + } + } + } else { + if (id == string_equal_func) { + define_string_equal(f); + } else if (id == string_concat_func) { + define_string_concat(f); + } else if (id == string_substring_func) { + define_string_substring(f); + } else if (id == string_is_prefix_func) { + define_string_is_prefix(f); + } else if (id == string_is_suffix_func) { + define_string_is_suffix(f); } } } } } + +void smt2_convt::define_string_equal(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 2) { + UNEXPECTEDCASE("args mismatch in string_equal"); + } + const exprt &s1 = args[0]; + const exprt &s2 = args[1]; + + irep_idt id = "string_equal."+i2string(defined_expressions.size()); + out << "(declare-fun " << id << " () Bool)\n"; + out << "(assert (= " << id << " (let " + << "((?s1 "; + convert_expr(s1); + out << ") (?s2 "; + convert_expr(s2); + out << ")) (and (= (cprover.str.len ?s1) (cprover.str.len ?s2))\n" + << "(forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len ?s1)) " + << "(= (select ?s1 ?n) (select ?s2 ?n))))))))\n"; + + defined_expressions[f] = id; +} + + +void smt2_convt::define_string_literal(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 1) { + UNEXPECTEDCASE("args mismatch in string_literal"); + } + const exprt &arg = args[0]; + if (arg.operands().size() == 1 && + arg.operands()[0].operands().size() == 1 && + arg.operands()[0].operands()[0].operands().size() == 2 && + arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ + const exprt &s = arg.operands()[0].operands()[0].operands()[0]; + irep_idt sval = to_string_constant(s).get_value(); + irep_idt id="string."+i2string(defined_expressions.size()); + defined_expressions[f] = id; + if (strings_mode == STRINGS_SMTLIB) { + // TODO -- handle better (also quoting) + out << "(define-fun " << id << " () cprover.String \"" + << sval << "\")\n"; + } else { + out << "(declare-fun " << id << " () cprover.String)\n"; + + for (std::size_t i = 0; i < sval.size(); ++i) { + out << "(assert (= (select " << id << " (_ bv" << i << " " + << string_length_width << "))" + << " (_ bv" << int(sval[i]) << " 8)))\n"; + } + out << "(assert (= (cprover.str.len " << id << ") " + << "(_ bv" << sval.size() << " " << string_length_width << ")))\n"; + + defined_expressions[f] = id; + } + return; + } + UNEXPECTEDCASE("string_literal"); +} + + +void smt2_convt::define_char_literal(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if (args.size() != 1) { + UNEXPECTEDCASE("args mismatch in string_literal"); + } + const exprt &arg = args[0]; + if (arg.operands().size() == 1 && + arg.operands()[0].operands().size() == 1 && + arg.operands()[0].operands()[0].operands().size() == 2 && + arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ + const exprt &s = arg.operands()[0].operands()[0].operands()[0]; + irep_idt sval = to_string_constant(s).get_value(); + if (sval.size() != 1) { + UNEXPECTEDCASE("bad literal in char_literal"); + } + + irep_idt id="char."+i2string(defined_expressions.size()); + defined_expressions[f] = id; + if (strings_mode == STRINGS_SMTLIB) { + // TODO -- handle better (also quoting) + out << "(define-fun " << id << " () cprover.Char \"" + << sval << "\")\n"; + } else { + out << "(define-fun " << id << " () cprover.Char " + << "(_ bv" << int(sval[0]) << " 8))\n"; + } + return; + } + UNEXPECTEDCASE("char_literal"); +} + + +void smt2_convt::define_string_concat(const function_application_exprt &f) +{ + irep_idt id="string_concat."+i2string(defined_expressions.size()); + const function_application_exprt::argumentst &args = f.arguments(); + defined_expressions[f] = id; + + out << "; string concatenation\n"; + out << "(declare-fun " << id << " () cprover.String)\n"; + out << "(assert (let ((?s0 "; + convert_expr(args[0]); + out << ") (?s1 "; + convert_expr(args[1]); + out << ")) " + << "(and (forall ((?n cprover.Pos)) " + << "(and " + << "(=> (bvult ?n (cprover.str.len ?s0)) " + << "(= (select ?s0 ?n) (select " << id << " ?n))) " + << "(=> (bvult ?n (cprover.str.len ?s1)) " + << "(= (select ?s1 ?n) (select " << id + << " (bvadd (cprover.str.len ?s0) ?n))))))\n"; + out << "(= (cprover.str.len " << id + << ") (bvadd (cprover.str.len ?s0) (cprover.str.len ?s1))))))\n"; +} + + +void smt2_convt::define_string_substring(const function_application_exprt &f) +{ + irep_idt id="string_substring."+i2string(defined_expressions.size()); + const function_application_exprt::argumentst &args = f.arguments(); + defined_expressions[f] = id; + + out << "; substring\n"; + out << "(declare-fun " << id << " () cprover.String)\n"; + out << "(assert (let ((?s "; + convert_expr(args[0]); + out << ") (?i "; + typecast_exprt i = typecast_exprt( + args[1], unsignedbv_typet(string_length_width)); + typecast_exprt j = typecast_exprt( + args[2], unsignedbv_typet(string_length_width)); + convert_expr(i); + out << ") (?j "; + convert_expr(j); + out << ")) "; + out << "(and " + << "(forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len " << id << "))\n" + << "(= (select " << id << " ?n) (select ?s (bvadd ?i ?n))))) " + << "(bvult ?i ?j) (bvule ?j (cprover.str.len ?s))\n" + << "(= (cprover.str.len " << id << ") (bvsub ?j ?i)))))\n"; +} + + +void smt2_convt::define_string_is_prefix(const function_application_exprt &f) +{ + irep_idt id="string_isprefix."+i2string(defined_expressions.size()); + const function_application_exprt::argumentst &args = f.arguments(); + defined_expressions[f] = id; + + out << "; string is prefix\n" + << "(declare-fun " << id << " () Bool)\n"; + out << "(assert (= " << id + << "(let ((?s1 "; + convert_expr(args[0]); + out << ") (?s "; + convert_expr(args[1]); + out << ")) " + << "(and (forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len ?s1)) " + << "(= (select ?s1 ?n) (select ?s ?n))))\n" + << "(bvuge (cprover.str.len ?s) (cprover.str.len ?s1))))))\n"; +} + + +void smt2_convt::define_string_is_suffix(const function_application_exprt &f) +{ + irep_idt id="string_issuffix."+i2string(defined_expressions.size()); + const function_application_exprt::argumentst &args = f.arguments(); + defined_expressions[f] = id; + + out << "; string is suffix\n" + << "(declare-fun " << id << " () Bool)\n"; + out << "(assert (= " << id + << "(let ((?s1 "; + convert_expr(args[0]); + out << ") (?s "; + convert_expr(args[1]); + out << ")) " + << "(and (forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len ?s1)) " + << "(= (select ?s1 ?n) " + << "(select ?s (bvsub (cprover.str.len ?s) " + << "(bvadd ?n (cprover.str.len ?s1)))))))\n" + << "(bvuge (cprover.str.len ?s) (cprover.str.len ?s1))))))\n"; +} + + +void smt2_convt::define_string_char_set(const function_application_exprt &f) +{ + irep_idt id="string_char_set."+i2string(defined_expressions.size()); + const function_application_exprt::argumentst &args = f.arguments(); + defined_expressions[f] = id; + + out << "; string update\n"; + out << "(declare-fun " << id << " () cprover.String)\n"; + typecast_exprt idx = typecast_exprt( + args[1], unsignedbv_typet(string_length_width)); + + if (strings_mode == STRINGS_SMTLIB) { + out << "(assert (= " << id + << "(let ((?s "; + convert_expr(args[0]); + out << ") (?i (cprover.ubv_to_int "; + convert_expr(idx); + out << "))) " + << "(str.++ (str.substr ?s 0 ?i) "; + convert_expr(args[2]); + out << " (str.substr ?s (+ ?i 1) (- (str.len ?s) (+ ?i 1)))))))\n"; + } else { + out << "(assert " + << "(let ((?s "; + convert_expr(args[0]); + out << ") (?i "; + convert_expr(idx); + out << ") (?c "; + convert_expr(args[2]); + out << ")) (=> (bvult ?i (cprover.str.len ?s)) " + << "(and (= " << id << " (store ?s ?i ?c)) " + << "(= (cprover.str.len ?s) (cprover.str.len " << id << "))))))\n"; + } +} + + /*******************************************************************\ Function: smt2_convt::use_array_theory @@ -5024,8 +5295,10 @@ void smt2_convt::convert_type(const typet &type) else if(type.id()==ID_struct) { irep_idt tag = to_struct_type(type).get_tag(); - if (use_strings && is_string_type(type)) { - out << "String"; + if (strings_mode != STRINGS_OFF && is_string_type(type)) { + out << "cprover.String"; + } else if (strings_mode != STRINGS_OFF && is_char_type(type)) { + out << "cprover.Char"; } else if(use_datatypes) { @@ -5161,6 +5434,16 @@ bool smt2_convt::is_string_type(const typet &type) return false; } + +bool smt2_convt::is_char_type(const typet &type) +{ + if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return tag == irep_idt("__CPROVER_char"); + } + return false; +} + /*******************************************************************\ Function: smt2_convt::find_symbols diff --git a/src/solvers/smt2/smt2_conv.h b/src/solvers/smt2/smt2_conv.h index 3ec121daa94..fb0f9e76c06 100644 --- a/src/solvers/smt2/smt2_conv.h +++ b/src/solvers/smt2/smt2_conv.h @@ -42,7 +42,7 @@ class smt2_convt:public prop_convt use_datatypes(false), use_array_of_bool(false), emit_set_logic(true), - use_strings(false), + strings_mode(STRINGS_OFF), out(_out), benchmark(_benchmark), notes(_notes), @@ -68,7 +68,7 @@ class smt2_convt:public prop_convt break; case CVC4: - use_strings = true; + strings_mode = STRINGS_SMTLIB; logic = "ALL_SUPPORTED"; break; @@ -85,16 +85,20 @@ class smt2_convt:public prop_convt use_array_of_bool=true; emit_set_logic=false; use_datatypes=true; + strings_mode = STRINGS_QARRAY; break; } string_literal_func = "__CPROVER_uninterpreted_string_literal"; - string_char_at_func = "__CPROVER_uninterpreted_char_at"; + char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; + string_equal_func = "__CPROVER_uninterpreted_string_equal"; + string_char_at_func = "__CPROVER_uninterpreted_char_at"; string_concat_func = "__CPROVER_uninterpreted_strcat"; string_substring_func = "__CPROVER_uninterpreted_substring"; string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; + string_char_set_func = "__CPROVER_uninterpreted_char_set"; string_length_width = 32; // TODO! write_header(); @@ -107,7 +111,8 @@ class smt2_convt:public prop_convt bool use_datatypes; bool use_array_of_bool; bool emit_set_logic; - bool use_strings; + enum strings_modet { STRINGS_OFF, STRINGS_SMTLIB, STRINGS_QARRAY }; + strings_modet strings_mode; // overloading interfaces virtual literalt convert(const exprt &expr); @@ -309,16 +314,20 @@ class smt2_convt:public prop_convt // string support irep_idt string_literal_func; + irep_idt char_literal_func; irep_idt string_length_func; + irep_idt string_equal_func; irep_idt string_char_at_func; irep_idt string_concat_func; irep_idt string_substring_func; irep_idt string_is_prefix_func; irep_idt string_is_suffix_func; + irep_idt string_char_set_func; size_t string_length_width; bool is_string_type(const typet &type); - void convert_string_literal(const function_application_exprt &f); + bool is_char_type(const typet &type); + void convert_string_equal(const function_application_exprt &f); void convert_string_length(const function_application_exprt &f); void convert_string_concat(const function_application_exprt &f); void convert_string_char_at(const function_application_exprt &f); @@ -326,6 +335,15 @@ class smt2_convt:public prop_convt void convert_string_is_prefix(const function_application_exprt &f); void convert_string_is_suffix(const function_application_exprt &f); + void define_string_literal(const function_application_exprt &f); + void define_char_literal(const function_application_exprt &f); + void define_string_equal(const function_application_exprt &f); + void define_string_concat(const function_application_exprt &f); + void define_string_substring(const function_application_exprt &f); + void define_string_is_prefix(const function_application_exprt &f); + void define_string_is_suffix(const function_application_exprt &f); + void define_string_char_set(const function_application_exprt &f); + defined_expressionst string_lengths; }; From 6d590221b33f84b71fa9c44c8f0f454297422aa7 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 15 Apr 2016 17:34:10 +0200 Subject: [PATCH 003/221] added first string test to the regression suite (still no .desc though) --- regression/strings/cprover-string-hack.h | 47 ++++++++++++++++++++++++ regression/strings/test1/test.c | 16 ++++++++ src/config.inc | 7 +++- 3 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 regression/strings/cprover-string-hack.h create mode 100644 regression/strings/test1/test.c diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h new file mode 100644 index 00000000000..fed7546e149 --- /dev/null +++ b/regression/strings/cprover-string-hack.h @@ -0,0 +1,47 @@ +typedef struct __CPROVER_string { char *s; } __CPROVER_string; +typedef struct __CPROVER_char { char c; } __CPROVER_char; + +// don't use these directly +extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, unsigned pos); +extern __CPROVER_bool __CPROVER_uninterpreted_string_equal(__CPROVER_string str1, __CPROVER_string str2); +extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); +extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); +extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); +extern unsigned __CPROVER_uninterpreted_strlen(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, unsigned i, unsigned j); +extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, unsigned pos, __CPROVER_char c); + +// use these instead +/* returns s[p] */ +#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at(s, p) + +/* string equality */ +#define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal(s1, s2) + +/* defines a string literal, e.g. __CPROVER_string_literal("foo") */ +#define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal(s) + +/* defines a char literal, e.g. __CPROVER_char_literal("c"). NOTE: you + * *must* use a C string literal as argument (i.e. double quotes "c", not + * single 'c') */ +#define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal(c) + +/* produces the concatenation of s1 and s2 */ +#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_strcat(s1, s2) + +/* return the length of s */ +#define __CPROVER_string_length(s) __CPROVER_uninterpreted_strlen(s) + +/* extracts the substring between positions i and j */ +#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_substring(s, i, j) + +/* test whether p is a prefix of s */ +#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_strprefixof(p, s) + +/* test whether p is a suffix of s */ +#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_strsuffixof(p, s) + +/* returns a new string obtained from s by setting s[p] = c */ +#define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c new file mode 100644 index 00000000000..712bd235895 --- /dev/null +++ b/regression/strings/test1/test.c @@ -0,0 +1,16 @@ +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + int i; + int j; + i = 2; + s = __CPROVER_string_literal("pippo"); + if (__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")) { + j = 1; + } + assert(j == 1); + return 0; +} diff --git a/src/config.inc b/src/config.inc index 4878f4e03ae..3d34581be55 100644 --- a/src/config.inc +++ b/src/config.inc @@ -1,9 +1,12 @@ +# -*- Makefile -*- # Build platform (use one of AUTO, Unix, OSX_Universal, MSVC, Cygwin, MinGW) BUILD_ENV = AUTO # Variables you may want to override #CXXFLAGS = -Wall -O0 -g -Werror -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic #CXXFLAGS = -std=c++11 +CXXFLAGS = -O0 -g +CXX = /home/alb/work/diffblue/rtags/g++ # If GLPK is available; this is used by goto-instrument and musketeer. #LIB_GLPK = -lglpk @@ -18,8 +21,8 @@ BUILD_ENV = AUTO MINISAT2 = ../../minisat-2.2.1 #GLUCOSE = ../../glucose-syrup #SMVSAT = -#LIBZIPLIB = ../../libzip/lib/.libs/libzip.a ../../zlib/libz.a -#LIBZIPINC = ../../libzip/lib +LIBZIPLIB = /usr/lib/libzip.so +LIBZIPINC = /usr/include # Signing identity for MacOS Gatekeeper From 61b64bbe3af9b395ae16e040a245f95835c74283 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 29 Apr 2016 15:25:07 +0200 Subject: [PATCH 004/221] fixed bug in converting string length for the CVC4 backend --- src/solvers/smt2/smt2_conv.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 672f0b9607f..5d899b43ab3 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -4960,7 +4960,7 @@ void smt2_convt::find_symbols(const exprt &expr) std::size_t w=to_bitvector_type(type).get_width(); irep_idt id="string_length."+i2string(string_lengths.size()); typecast_exprt len = typecast_exprt( - symbol_exprt(id), unsignedbv_typet(string_length_width)); + symbol_exprt(id, expr.type()), unsignedbv_typet(string_length_width)); out << "(declare-fun " << id << " () "; convert_type(expr.type()); out << ")\n"; From 08af98c3ae9a1eb1d716307001128f2bec6beb4a Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 29 Apr 2016 15:25:16 +0200 Subject: [PATCH 005/221] added more string tests --- regression/strings/cprover-string-hack.h | 32 ++++++++++++++---------- regression/strings/test1/test.c | 1 + regression/strings/test1/test.desc | 7 ++++++ regression/strings/test2/test.c | 13 ++++++++++ regression/strings/test2/test.desc | 7 ++++++ regression/strings/test3/test.c | 20 +++++++++++++++ regression/strings/test3/test.desc | 7 ++++++ regression/strings/test4/test.c | 17 +++++++++++++ regression/strings/test4/test.desc | 7 ++++++ 9 files changed, 98 insertions(+), 13 deletions(-) create mode 100644 regression/strings/test1/test.desc create mode 100644 regression/strings/test2/test.c create mode 100644 regression/strings/test2/test.desc create mode 100644 regression/strings/test3/test.c create mode 100644 regression/strings/test3/test.desc create mode 100644 regression/strings/test4/test.c create mode 100644 regression/strings/test4/test.desc diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index fed7546e149..b2a86c2d425 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -1,19 +1,9 @@ typedef struct __CPROVER_string { char *s; } __CPROVER_string; typedef struct __CPROVER_char { char c; } __CPROVER_char; -// don't use these directly -extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, unsigned pos); -extern __CPROVER_bool __CPROVER_uninterpreted_string_equal(__CPROVER_string str1, __CPROVER_string str2); -extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); -extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); -extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); -extern unsigned __CPROVER_uninterpreted_strlen(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, unsigned i, unsigned j); -extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, unsigned pos, __CPROVER_char c); - -// use these instead +/****************************************************************************** + * CPROVER string functions + ******************************************************************************/ /* returns s[p] */ #define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at(s, p) @@ -45,3 +35,19 @@ extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, u /* returns a new string obtained from s by setting s[p] = c */ #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) + + +/****************************************************************************** + * don't use these directly + ******************************************************************************/ +extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, unsigned pos); +extern __CPROVER_bool __CPROVER_uninterpreted_string_equal(__CPROVER_string str1, __CPROVER_string str2); +extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); +extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); +extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); +extern unsigned __CPROVER_uninterpreted_strlen(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, unsigned i, unsigned j); +extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, unsigned pos, __CPROVER_char c); + diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c index 712bd235895..d73324f8ef4 100644 --- a/regression/strings/test1/test.c +++ b/regression/strings/test1/test.c @@ -1,3 +1,4 @@ +#include #include "../cprover-string-hack.h" diff --git a/regression/strings/test1/test.desc b/regression/strings/test1/test.desc new file mode 100644 index 00000000000..6373a3a0bcf --- /dev/null +++ b/regression/strings/test1/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--z3 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test2/test.c b/regression/strings/test2/test.c new file mode 100644 index 00000000000..cfb54b4265a --- /dev/null +++ b/regression/strings/test2/test.c @@ -0,0 +1,13 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + int n; + s = __CPROVER_string_literal("pippo"); + n = __CPROVER_string_length(s); + assert(n == 5); + return 0; +} diff --git a/regression/strings/test2/test.desc b/regression/strings/test2/test.desc new file mode 100644 index 00000000000..6373a3a0bcf --- /dev/null +++ b/regression/strings/test2/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--z3 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test3/test.c b/regression/strings/test3/test.c new file mode 100644 index 00000000000..9e027cba21b --- /dev/null +++ b/regression/strings/test3/test.c @@ -0,0 +1,20 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s, s2, s3; + int i; + + s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(__CPROVER_string_length(s2) == i); + __CPROVER_assume( + __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + + assert(__CPROVER_string_length(s) == i + 5); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + + return 0; +} diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc new file mode 100644 index 00000000000..6373a3a0bcf --- /dev/null +++ b/regression/strings/test3/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--z3 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test4/test.c b/regression/strings/test4/test.c new file mode 100644 index 00000000000..d73324f8ef4 --- /dev/null +++ b/regression/strings/test4/test.c @@ -0,0 +1,17 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + int i; + int j; + i = 2; + s = __CPROVER_string_literal("pippo"); + if (__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")) { + j = 1; + } + assert(j == 1); + return 0; +} diff --git a/regression/strings/test4/test.desc b/regression/strings/test4/test.desc new file mode 100644 index 00000000000..6373a3a0bcf --- /dev/null +++ b/regression/strings/test4/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--z3 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- From 89dbec25889b48b72267a1e6126c464d1ca987ec Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 29 Apr 2016 15:26:34 +0200 Subject: [PATCH 006/221] removed accidentally committed changes to config.inc --- src/config.inc | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/config.inc b/src/config.inc index 3d34581be55..1e1864c8f81 100644 --- a/src/config.inc +++ b/src/config.inc @@ -5,8 +5,6 @@ BUILD_ENV = AUTO # Variables you may want to override #CXXFLAGS = -Wall -O0 -g -Werror -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic #CXXFLAGS = -std=c++11 -CXXFLAGS = -O0 -g -CXX = /home/alb/work/diffblue/rtags/g++ # If GLPK is available; this is used by goto-instrument and musketeer. #LIB_GLPK = -lglpk From b820c1e34a25b98b9ce7578db2f52ad239a666bd Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 6 May 2016 16:53:29 +0200 Subject: [PATCH 007/221] strings: added hand-written SMT2 versions of test3.c these show that, as expected, conversion BV<->INT introduces huge performance problems --- regression/strings/test3/test-bv-to-int.smt2 | 25 ++++++++++++++++++++ regression/strings/test3/test-int.smt2 | 20 ++++++++++++++++ 2 files changed, 45 insertions(+) create mode 100644 regression/strings/test3/test-bv-to-int.smt2 create mode 100644 regression/strings/test3/test-int.smt2 diff --git a/regression/strings/test3/test-bv-to-int.smt2 b/regression/strings/test3/test-bv-to-int.smt2 new file mode 100644 index 00000000000..8e036a3aaa4 --- /dev/null +++ b/regression/strings/test3/test-bv-to-int.smt2 @@ -0,0 +1,25 @@ +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) + +(declare-fun s () String) +(declare-fun s2 () String) +(declare-fun s3 () String) + +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (let ((bit0 (_ bv0 1))) + (+ (ite (= ((_ extract 0 0) ?x) bit0) 0 1) (ite (= ((_ extract 1 1) ?x) bit0) 0 2) (ite (= ((_ extract 2 2) ?x) bit0) 0 4) (ite (= ((_ extract 3 3) ?x) bit0) 0 8) (ite (= ((_ extract 4 4) ?x) bit0) 0 16) (ite (= ((_ extract 5 5) ?x) bit0) 0 32) (ite (= ((_ extract 6 6) ?x) bit0) 0 64) (ite (= ((_ extract 7 7) ?x) bit0) 0 128) (ite (= ((_ extract 8 8) ?x) bit0) 0 256) (ite (= ((_ extract 9 9) ?x) bit0) 0 512) (ite (= ((_ extract 10 10) ?x) bit0) 0 1024) (ite (= ((_ extract 11 11) ?x) bit0) 0 2048) (ite (= ((_ extract 12 12) ?x) bit0) 0 4096) (ite (= ((_ extract 13 13) ?x) bit0) 0 8192) (ite (= ((_ extract 14 14) ?x) bit0) 0 16384) (ite (= ((_ extract 15 15) ?x) bit0) 0 32768) (ite (= ((_ extract 16 16) ?x) bit0) 0 65536) (ite (= ((_ extract 17 17) ?x) bit0) 0 131072) (ite (= ((_ extract 18 18) ?x) bit0) 0 262144) (ite (= ((_ extract 19 19) ?x) bit0) 0 524288) (ite (= ((_ extract 20 20) ?x) bit0) 0 1048576) (ite (= ((_ extract 21 21) ?x) bit0) 0 2097152) (ite (= ((_ extract 22 22) ?x) bit0) 0 4194304) (ite (= ((_ extract 23 23) ?x) bit0) 0 8388608) (ite (= ((_ extract 24 24) ?x) bit0) 0 16777216) (ite (= ((_ extract 25 25) ?x) bit0) 0 33554432) (ite (= ((_ extract 26 26) ?x) bit0) 0 67108864) (ite (= ((_ extract 27 27) ?x) bit0) 0 134217728) (ite (= ((_ extract 28 28) ?x) bit0) 0 268435456) (ite (= ((_ extract 29 29) ?x) bit0) 0 536870912) (ite (= ((_ extract 30 30) ?x) bit0) 0 1073741824) (ite (= ((_ extract 31 31) ?x) bit0) 0 2147483648) 0))) + +(declare-fun bvi () cprover.Pos) +(define-fun i () Int (cprover.ubv_to_int bvi)) + +(assert (= s (str.++ s2 s3))) + +(assert (= (str.len s2) i)) +(assert (= s3 "pippo")) + +(define-fun p1 () Bool (= (str.len s) (+ i 5))) +(define-fun p2 () Bool (str.suffixof "po" s)) +(define-fun p3 () Bool (= (str.at s i) "p")) + +(assert (or (not p1) (not p2) (not p3))) +(check-sat) diff --git a/regression/strings/test3/test-int.smt2 b/regression/strings/test3/test-int.smt2 new file mode 100644 index 00000000000..1cebe5cba31 --- /dev/null +++ b/regression/strings/test3/test-int.smt2 @@ -0,0 +1,20 @@ +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) + +(declare-fun s () String) +(declare-fun s2 () String) +(declare-fun s3 () String) + +(declare-fun i () Int) + +(assert (= s (str.++ s2 s3))) + +(assert (= (str.len s2) i)) +(assert (= s3 "pippo")) + +(define-fun p1 () Bool (= (str.len s) (+ i 5))) +(define-fun p2 () Bool (str.suffixof "po" s)) +(define-fun p3 () Bool (= (str.at s i) "p")) + +(assert (or (not p1) (not p2) (not p3))) +(check-sat) From 7cc6a6b8fadb89d95610d2b47198696d99555017 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 6 May 2016 17:55:07 +0200 Subject: [PATCH 008/221] strings test3: added version with assertions checked one by one this is quite quick also with the INT<->BV conversion --- .../test3/test-bv-to-int-onebyone.smt2 | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 regression/strings/test3/test-bv-to-int-onebyone.smt2 diff --git a/regression/strings/test3/test-bv-to-int-onebyone.smt2 b/regression/strings/test3/test-bv-to-int-onebyone.smt2 new file mode 100644 index 00000000000..61e490a72bf --- /dev/null +++ b/regression/strings/test3/test-bv-to-int-onebyone.smt2 @@ -0,0 +1,37 @@ +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) + +(declare-fun s () String) +(declare-fun s2 () String) +(declare-fun s3 () String) + +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (let ((bit0 (_ bv0 1))) + (+ (ite (= ((_ extract 0 0) ?x) bit0) 0 1) (ite (= ((_ extract 1 1) ?x) bit0) 0 2) (ite (= ((_ extract 2 2) ?x) bit0) 0 4) (ite (= ((_ extract 3 3) ?x) bit0) 0 8) (ite (= ((_ extract 4 4) ?x) bit0) 0 16) (ite (= ((_ extract 5 5) ?x) bit0) 0 32) (ite (= ((_ extract 6 6) ?x) bit0) 0 64) (ite (= ((_ extract 7 7) ?x) bit0) 0 128) (ite (= ((_ extract 8 8) ?x) bit0) 0 256) (ite (= ((_ extract 9 9) ?x) bit0) 0 512) (ite (= ((_ extract 10 10) ?x) bit0) 0 1024) (ite (= ((_ extract 11 11) ?x) bit0) 0 2048) (ite (= ((_ extract 12 12) ?x) bit0) 0 4096) (ite (= ((_ extract 13 13) ?x) bit0) 0 8192) (ite (= ((_ extract 14 14) ?x) bit0) 0 16384) (ite (= ((_ extract 15 15) ?x) bit0) 0 32768) (ite (= ((_ extract 16 16) ?x) bit0) 0 65536) (ite (= ((_ extract 17 17) ?x) bit0) 0 131072) (ite (= ((_ extract 18 18) ?x) bit0) 0 262144) (ite (= ((_ extract 19 19) ?x) bit0) 0 524288) (ite (= ((_ extract 20 20) ?x) bit0) 0 1048576) (ite (= ((_ extract 21 21) ?x) bit0) 0 2097152) (ite (= ((_ extract 22 22) ?x) bit0) 0 4194304) (ite (= ((_ extract 23 23) ?x) bit0) 0 8388608) (ite (= ((_ extract 24 24) ?x) bit0) 0 16777216) (ite (= ((_ extract 25 25) ?x) bit0) 0 33554432) (ite (= ((_ extract 26 26) ?x) bit0) 0 67108864) (ite (= ((_ extract 27 27) ?x) bit0) 0 134217728) (ite (= ((_ extract 28 28) ?x) bit0) 0 268435456) (ite (= ((_ extract 29 29) ?x) bit0) 0 536870912) (ite (= ((_ extract 30 30) ?x) bit0) 0 1073741824) (ite (= ((_ extract 31 31) ?x) bit0) 0 2147483648) 0))) + +(declare-fun bvi () cprover.Pos) +(define-fun i () Int (cprover.ubv_to_int bvi)) + +(assert (= s (str.++ s2 s3))) + +(assert (= (str.len s2) i)) +(assert (= s3 "pippo")) + +(define-fun p1 () Bool (= (str.len s) (+ i 5))) +(define-fun p2 () Bool (str.suffixof "po" s)) +(define-fun p3 () Bool (= (str.at s i) "p")) + +(push 1) +(assert (not p1)) +(check-sat) +(pop 1) + +(push 1) +(assert (not p2)) +(check-sat) +(pop 1) + +(push 1) +(assert (not p3)) +(check-sat) +(pop 1) From ccba04e64f894055ac291003fbc8eb9770963d8a Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 13 May 2016 10:35:15 +0200 Subject: [PATCH 009/221] revised string encoding as quantified arrays --- src/solvers/smt2/smt2_conv.cpp | 192 ++++++++++++++++++++++++--------- 1 file changed, 141 insertions(+), 51 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 5d899b43ab3..d93e0722cca 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -126,6 +126,7 @@ void smt2_convt::write_header() out << "(set-logic " << logic << ")" << "\n"; if (strings_mode == STRINGS_SMTLIB) { + out << "; string support via QF_S SMT-LIB logic\n"; out << "(define-sort cprover.String () String)\n"; out << "(define-sort cprover.Char () String)\n"; out << "(define-sort cprover.Pos () (_ BitVec " @@ -142,6 +143,7 @@ void smt2_convt::write_header() out << "0))" << ")\n\n"; } else if (strings_mode == STRINGS_QARRAY) { + out << "; string support via PASS-style quantified arrays\n"; out << "(define-sort cprover.Char () (_ BitVec 8))\n" << "(define-sort cprover.Pos () (_ BitVec " << string_length_width << "))\n" @@ -5001,17 +5003,38 @@ void smt2_convt::define_string_equal(const function_application_exprt &f) const exprt &s1 = args[0]; const exprt &s2 = args[1]; - irep_idt id = "string_equal."+i2string(defined_expressions.size()); + out << "; string equal\n"; + + std::string index = i2string(defined_expressions.size()); + irep_idt id = "string_equal." + index; out << "(declare-fun " << id << " () Bool)\n"; - out << "(assert (= " << id << " (let " - << "((?s1 "; + irep_idt s1id = "string_equal.s1." + index; + irep_idt s2id = "string_equal.s2." + index; + out << "(define-fun " << s1id << " () cprover.String "; convert_expr(s1); - out << ") (?s2 "; + out << ")\n"; + out << "(define-fun " << s2id << " () cprover.String "; convert_expr(s2); - out << ")) (and (= (cprover.str.len ?s1) (cprover.str.len ?s2))\n" - << "(forall ((?n cprover.Pos)) " - << "(=> (bvult ?n (cprover.str.len ?s1)) " - << "(= (select ?s1 ?n) (select ?s2 ?n))))))))\n"; + out << ")\n"; + irep_idt witness = "string_equal.idx." + index; + out << "(declare-fun " << witness << " () cprover.Pos)\n"; + + out << "(assert (=> " << id + << " (= (cprover.str.len " << s1id << ") " + << "(cprover.str.len " << s2id << "))))\n"; + + out << "(assert (forall ((?n cprover.Pos)) " + << "(=> (and " << id << " (bvult ?n (cprover.str.len " << s1id << "))) " + << "(= (select " << s1id << " ?n) " + << "(select " << s2id << " ?n)))))\n"; + + out << "(assert (=> (not " << id << ") (or "; + out << "(not (= (cprover.str.len " << s1id << ") (cprover.str.len " + << s2id << ")))\n"; + out << "(and (bvult " << witness << " (cprover.str.len " << s1id << ")) " + << "(not (= (select " << s1id << " " << witness << ") " + << "(select " << s2id << " " << witness << ")))"; + out << "))))\n\n"; defined_expressions[f] = id; } @@ -5090,98 +5113,163 @@ void smt2_convt::define_char_literal(const function_application_exprt &f) void smt2_convt::define_string_concat(const function_application_exprt &f) { - irep_idt id="string_concat."+i2string(defined_expressions.size()); + std::string index = i2string(defined_expressions.size()); + irep_idt id="string_concat." + index; const function_application_exprt::argumentst &args = f.arguments(); defined_expressions[f] = id; out << "; string concatenation\n"; out << "(declare-fun " << id << " () cprover.String)\n"; - out << "(assert (let ((?s0 "; + irep_idt s0id = "string_concat.s0." + index; + irep_idt s1id = "string_concat.s1." + index; + out << "(define-fun " << s0id << " () cprover.String "; convert_expr(args[0]); - out << ") (?s1 "; + out << ")\n"; + out << "(define-fun " << s1id << " () cprover.String "; convert_expr(args[1]); - out << ")) " - << "(and (forall ((?n cprover.Pos)) " - << "(and " - << "(=> (bvult ?n (cprover.str.len ?s0)) " - << "(= (select ?s0 ?n) (select " << id << " ?n))) " - << "(=> (bvult ?n (cprover.str.len ?s1)) " - << "(= (select ?s1 ?n) (select " << id - << " (bvadd (cprover.str.len ?s0) ?n))))))\n"; - out << "(= (cprover.str.len " << id - << ") (bvadd (cprover.str.len ?s0) (cprover.str.len ?s1))))))\n"; + out << ")\n"; + out << "(assert (forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len " << s0id << ")) " + << "(= (select " << s0id << " ?n) (select " << id << " ?n)))))\n"; + out << "(assert (forall ((?n cprover.Pos)) " + << "(=> (bvult ?n (cprover.str.len " << s1id << ")) " + << "(= (select " << s1id << " ?n) (select " << id + << " (bvadd (cprover.str.len " << s0id << ") ?n))))))\n"; + out << "(assert (= (cprover.str.len " << id + << ") (bvadd (cprover.str.len " << s0id << ") " + << "(cprover.str.len " << s1id << "))))\n\n"; } void smt2_convt::define_string_substring(const function_application_exprt &f) { - irep_idt id="string_substring."+i2string(defined_expressions.size()); + std::string index = i2string(defined_expressions.size()); + irep_idt id="string_substring." + index; const function_application_exprt::argumentst &args = f.arguments(); defined_expressions[f] = id; out << "; substring\n"; out << "(declare-fun " << id << " () cprover.String)\n"; - out << "(assert (let ((?s "; + + irep_idt sid = "string_substring.s." + index; + irep_idt iid = "string_substring.i." + index; + irep_idt jid = "string_substring.j." + index; + + out << "(define-fun " << sid << " () cprover.String "; convert_expr(args[0]); - out << ") (?i "; + out << ")\n"; + typecast_exprt i = typecast_exprt( args[1], unsignedbv_typet(string_length_width)); typecast_exprt j = typecast_exprt( args[2], unsignedbv_typet(string_length_width)); + + out << "(define-fun " << iid << " () cprover.Pos "; convert_expr(i); - out << ") (?j "; + out << ")\n"; + out << "(define-fun " << jid << " () cprover.Pos "; convert_expr(j); - out << ")) "; - out << "(and " + out << ")\n"; + + out << "(assert " << "(forall ((?n cprover.Pos)) " << "(=> (bvult ?n (cprover.str.len " << id << "))\n" - << "(= (select " << id << " ?n) (select ?s (bvadd ?i ?n))))) " - << "(bvult ?i ?j) (bvule ?j (cprover.str.len ?s))\n" - << "(= (cprover.str.len " << id << ") (bvsub ?j ?i)))))\n"; + << "(= (select " << id << " ?n) (select " << sid + << " (bvadd " << iid << " ?n))))))\n"; + + out << "(assert (and " + << "(bvult " << iid << " " << jid << ") " + << "(bvule " << jid << " (cprover.str.len " << sid << "))\n" + << "(= (cprover.str.len " << id << ") " + << "(bvsub " << jid << " " << iid << "))))\n"; } void smt2_convt::define_string_is_prefix(const function_application_exprt &f) { - irep_idt id="string_isprefix."+i2string(defined_expressions.size()); + std::string index = i2string(defined_expressions.size()); + irep_idt id="string_isprefix." + index; const function_application_exprt::argumentst &args = f.arguments(); defined_expressions[f] = id; + irep_idt sid = "string_prefix.s." + index; + irep_idt s1id = "string_prefix.s1." + index; + out << "; string is prefix\n" << "(declare-fun " << id << " () Bool)\n"; - out << "(assert (= " << id - << "(let ((?s1 "; + out << "(define-fun " << s1id << " () cprover.String "; convert_expr(args[0]); - out << ") (?s "; + out << ")\n"; + out << "(define-fun " << sid << " () cprover.String "; convert_expr(args[1]); - out << ")) " - << "(and (forall ((?n cprover.Pos)) " - << "(=> (bvult ?n (cprover.str.len ?s1)) " - << "(= (select ?s1 ?n) (select ?s ?n))))\n" - << "(bvuge (cprover.str.len ?s) (cprover.str.len ?s1))))))\n"; + + irep_idt ugeid = "string_prefix.uge." + index; + out << ")\n"; + out << "(define-fun " << ugeid << " () Bool " + << " (bvuge (cprover.str.len " << sid << ") " + << "(cprover.str.len " << s1id << ")))\n"; + + out << "(assert (=> " << id << " " << ugeid << "))\n"; + + out << "(assert (forall ((?n cprover.Pos)) " + << "(=> (and " << id << " (bvult ?n (cprover.str.len " << s1id << "))) " + << "(= (select " << s1id << " ?n) " + << "(select " << sid << " ?n)))))\n"; + + irep_idt witness = "string_prefix.idx." + index; + out << "(declare-fun " << witness << " () cprover.Pos)\n"; + + out << "(assert (=> (not " << id << ") (or\n" + << "(not " << ugeid << ")\n" + << "(and (bvult " << witness << " (cprover.str.len " << s1id << ")) " + << "(not (= (select " << s1id << " " << witness << ") " + << "(select " << sid << " " << witness << "))))\n"; + out << ")))\n\n"; } void smt2_convt::define_string_is_suffix(const function_application_exprt &f) { - irep_idt id="string_issuffix."+i2string(defined_expressions.size()); + std::string index = i2string(defined_expressions.size()); + irep_idt id="string_issuffix." + index; const function_application_exprt::argumentst &args = f.arguments(); defined_expressions[f] = id; + irep_idt sid = "string_suffix.s." + index; + irep_idt s1id = "string_suffix.s1." + index; + out << "; string is suffix\n" << "(declare-fun " << id << " () Bool)\n"; - out << "(assert (= " << id - << "(let ((?s1 "; + out << "(define-fun " << s1id << " () cprover.String "; convert_expr(args[0]); - out << ") (?s "; + out << ")\n"; + out << "(define-fun " << sid << " () cprover.String "; convert_expr(args[1]); - out << ")) " - << "(and (forall ((?n cprover.Pos)) " - << "(=> (bvult ?n (cprover.str.len ?s1)) " - << "(= (select ?s1 ?n) " - << "(select ?s (bvsub (cprover.str.len ?s) " - << "(bvadd ?n (cprover.str.len ?s1)))))))\n" - << "(bvuge (cprover.str.len ?s) (cprover.str.len ?s1))))))\n"; + + irep_idt ugeid = "string_suffix.uge." + index; + out << ")\n"; + out << "(define-fun " << ugeid << " () Bool " + << " (bvuge (cprover.str.len " << sid << ") " + << "(cprover.str.len " << s1id << ")))\n"; + + out << "(assert (=> " << id << " " << ugeid << "))\n"; + + out << "(assert (forall ((?n cprover.Pos)) " + << "(=> (and " << id << " (bvult ?n (cprover.str.len " << s1id << "))) " + << "(= (select " << s1id << " ?n) " + << "(select " << sid << " (bvsub (cprover.str.len " << sid << ") " + << "(bvadd ?n (cprover.str.len " << s1id << "))))))))\n"; + + irep_idt witness = "string_suffix.idx." + index; + out << "(declare-fun " << witness << " () cprover.Pos)\n"; + + out << "(assert (=> (not " << id << ") (or\n" + << "(not " << ugeid << ")\n" + << "(and (bvult " << witness << " (cprover.str.len " << s1id << ")) " + << "(not (= (select " << s1id << " " << witness << ") " + << "(select " << sid << " (bvsub (cprover.str.len " << sid << ") " + << "(bvadd " << witness << " (cprover.str.len " << s1id << ")))))))\n"; + out << ")))\n\n"; } @@ -5546,7 +5634,9 @@ void smt2_convt::find_symbols_rec( // Cater for mutually recursive struct types bool need_decl=false; if(use_datatypes && - datatype_map.find(type)==datatype_map.end()) + datatype_map.find(type)==datatype_map.end() && + !(strings_mode != STRINGS_OFF && + (is_string_type(type) || is_char_type(type)))) { std::string smt_typename = "struct."+i2string(datatype_map.size()); datatype_map[type] = smt_typename; From 72ccef36ecd2eb8f1301514c0c0d99c8dcf7d45c Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 13 May 2016 18:06:43 +0200 Subject: [PATCH 010/221] added more string tests --- regression/strings/test3.1/test.c | 21 +++++++++++++++++++++ regression/strings/test3.1/test.desc | 7 +++++++ regression/strings/test3.2/test.c | 21 +++++++++++++++++++++ regression/strings/test3.2/test.desc | 7 +++++++ regression/strings/test3.3/test.c | 21 +++++++++++++++++++++ regression/strings/test3.3/test.desc | 7 +++++++ 6 files changed, 84 insertions(+) create mode 100644 regression/strings/test3.1/test.c create mode 100644 regression/strings/test3.1/test.desc create mode 100644 regression/strings/test3.2/test.c create mode 100644 regression/strings/test3.2/test.desc create mode 100644 regression/strings/test3.3/test.c create mode 100644 regression/strings/test3.3/test.desc diff --git a/regression/strings/test3.1/test.c b/regression/strings/test3.1/test.c new file mode 100644 index 00000000000..7f7d34fa30f --- /dev/null +++ b/regression/strings/test3.1/test.c @@ -0,0 +1,21 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s, s2, s3; + int i; + + s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(__CPROVER_string_length(s2) == i); + __CPROVER_assume( + __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + + // proving the assertions individually seems to be much faster + assert(__CPROVER_string_length(s) == i + 5); + //assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + //assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + + return 0; +} diff --git a/regression/strings/test3.1/test.desc b/regression/strings/test3.1/test.desc new file mode 100644 index 00000000000..4dfa75d77d5 --- /dev/null +++ b/regression/strings/test3.1/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--cvc4 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c new file mode 100644 index 00000000000..9ef91e77d8a --- /dev/null +++ b/regression/strings/test3.2/test.c @@ -0,0 +1,21 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s, s2, s3; + int i; + + s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(__CPROVER_string_length(s2) == i); + __CPROVER_assume( + __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + + // proving the assertions individually seems to be much faster + //assert(__CPROVER_string_length(s) == i + 5); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + //assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + + return 0; +} diff --git a/regression/strings/test3.2/test.desc b/regression/strings/test3.2/test.desc new file mode 100644 index 00000000000..4dfa75d77d5 --- /dev/null +++ b/regression/strings/test3.2/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--cvc4 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test3.3/test.c b/regression/strings/test3.3/test.c new file mode 100644 index 00000000000..4a705117209 --- /dev/null +++ b/regression/strings/test3.3/test.c @@ -0,0 +1,21 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s, s2, s3; + int i; + + s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(__CPROVER_string_length(s2) == i); + __CPROVER_assume( + __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + + // proving the assertions individually seems to be much faster + //assert(__CPROVER_string_length(s) == i + 5); + //assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + + return 0; +} diff --git a/regression/strings/test3.3/test.desc b/regression/strings/test3.3/test.desc new file mode 100644 index 00000000000..4dfa75d77d5 --- /dev/null +++ b/regression/strings/test3.3/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--cvc4 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- From 44f48e548d9f670cc0435bb3225a04bfb46dbef5 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 20 May 2016 13:51:03 +0200 Subject: [PATCH 011/221] use native support for int2bv in CVC4 --- src/solvers/smt2/smt2_conv.cpp | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index d93e0722cca..23fd28f2e58 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -133,15 +133,16 @@ void smt2_convt::write_header() << string_length_width << "))\n"; out << "(define-fun cprover.ubv_to_int ((?x cprover.Pos)) " << "Int "; - out << "(let ((bit0 (_ bv0 1))) (+ "; - mp_integer bit; - for (size_t i = 0; i < string_length_width; ++i) { - bit.setPower2(i); - out << "(ite (= ((_ extract " << i << " " << i << ") ?x) bit0) 0 " - << bit << ") "; - } - out << "0))" - << ")\n\n"; + out << "(bv2nat ?x))\n\n"; + // out << "(let ((bit0 (_ bv0 1))) (+ "; + // mp_integer bit; + // for (size_t i = 0; i < string_length_width; ++i) { + // bit.setPower2(i); + // out << "(ite (= ((_ extract " << i << " " << i << ") ?x) bit0) 0 " + // << bit << ") "; + // } + // out << "0))" + // << ")\n\n"; } else if (strings_mode == STRINGS_QARRAY) { out << "; string support via PASS-style quantified arrays\n"; out << "(define-sort cprover.Char () (_ BitVec 8))\n" @@ -4962,7 +4963,8 @@ void smt2_convt::find_symbols(const exprt &expr) std::size_t w=to_bitvector_type(type).get_width(); irep_idt id="string_length."+i2string(string_lengths.size()); typecast_exprt len = typecast_exprt( - symbol_exprt(id, expr.type()), unsignedbv_typet(string_length_width)); + symbol_exprt(id, expr.type()), + unsignedbv_typet(string_length_width)); out << "(declare-fun " << id << " () "; convert_type(expr.type()); out << ")\n"; @@ -4971,6 +4973,11 @@ void smt2_convt::find_symbols(const exprt &expr) out << ") (str.len "; convert_expr(args[0]); out << ")))\n"; + // out << "(define-fun " << id << " () "; + // convert_type(expr.type()); + // out << " ((_ int2bv " << w << ") (str.len "; + // convert_expr(args[0]); + // out << ")))\n"; string_lengths[expr] = id; } else { UNEXPECTEDCASE("return type of string_length is not a bit-vector"); From 1f4d2ab5741818a1ac3fbe77f207ec9eafe0ece8 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 20 May 2016 16:33:38 +0200 Subject: [PATCH 012/221] try to add an explicit upper bound to string lengths --- src/solvers/smt2/smt2_conv.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 23fd28f2e58..df359ea1306 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -4784,6 +4784,11 @@ void smt2_convt::find_symbols(const exprt &expr) << "| () "; convert_type(expr.type()); out << ")" << "\n"; + + if (strings_mode == STRINGS_QARRAY && is_string_type(expr.type())) { + out << "(assert (bvule (cprover.str.len |" << smt2_identifier << "|) " + << "(_ bv2147483647 32)))\n"; + } } } else if(expr.id()==ID_array_of) From c3cc804bdcfc50219c64d62d0c4e894d6b700db8 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 10 Jun 2016 16:07:31 +0200 Subject: [PATCH 013/221] added further string length constraints to cope with possible overflows --- src/solvers/smt2/smt2_conv.cpp | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index df359ea1306..808fba01503 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -4784,11 +4784,6 @@ void smt2_convt::find_symbols(const exprt &expr) << "| () "; convert_type(expr.type()); out << ")" << "\n"; - - if (strings_mode == STRINGS_QARRAY && is_string_type(expr.type())) { - out << "(assert (bvule (cprover.str.len |" << smt2_identifier << "|) " - << "(_ bv2147483647 32)))\n"; - } } } else if(expr.id()==ID_array_of) @@ -5149,7 +5144,11 @@ void smt2_convt::define_string_concat(const function_application_exprt &f) << " (bvadd (cprover.str.len " << s0id << ") ?n))))))\n"; out << "(assert (= (cprover.str.len " << id << ") (bvadd (cprover.str.len " << s0id << ") " - << "(cprover.str.len " << s1id << "))))\n\n"; + << "(cprover.str.len " << s1id << "))))\n"; + out << "(assert (bvuge (cprover.str.len " << id << ") " + << "(cprover.str.len " << s0id << ")))\n"; + out << "(assert (bvuge (cprover.str.len " << id << ") " + << "(cprover.str.len " << s1id << ")))\n\n"; } @@ -5194,6 +5193,9 @@ void smt2_convt::define_string_substring(const function_application_exprt &f) << "(bvule " << jid << " (cprover.str.len " << sid << "))\n" << "(= (cprover.str.len " << id << ") " << "(bvsub " << jid << " " << iid << "))))\n"; + + out << "(assert (bvuge (cprover.str.len " << sid << ") " + << "(cprover.str.len " << id << ")))\n\n"; } From 916f7ce1f1638c3d7151c466b4d9167ef06375ab Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 10 Jun 2016 16:07:42 +0200 Subject: [PATCH 014/221] fixed encoding of string suffix --- src/solvers/smt2/smt2_conv.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 808fba01503..0c6a54d7075 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -5281,8 +5281,9 @@ void smt2_convt::define_string_is_suffix(const function_application_exprt &f) << "(not " << ugeid << ")\n" << "(and (bvult " << witness << " (cprover.str.len " << s1id << ")) " << "(not (= (select " << s1id << " " << witness << ") " - << "(select " << sid << " (bvsub (cprover.str.len " << sid << ") " - << "(bvadd " << witness << " (cprover.str.len " << s1id << ")))))))\n"; + << "(select " << sid << " (bvadd " << witness + << " (bvsub (cprover.str.len " << sid << ") " + << "(cprover.str.len " << s1id << ")))))))\n"; out << ")))\n\n"; } From 9bb988da9a4bfd38ddc8f2f14666482a6b0501a9 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 17 Jun 2016 17:19:25 +0200 Subject: [PATCH 015/221] fixed double output in encoding string constraints (check in the cache before re-generating) --- regression/strings/test3.4/test.c | 18 ++++++++++++++++++ regression/strings/test3.4/test.desc | 7 +++++++ regression/strings/test5/test.c | 13 +++++++++++++ regression/strings/test5/test.desc | 7 +++++++ src/solvers/smt2/smt2_conv.cpp | 28 ++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 regression/strings/test3.4/test.c create mode 100644 regression/strings/test3.4/test.desc create mode 100644 regression/strings/test5/test.c create mode 100644 regression/strings/test5/test.desc diff --git a/regression/strings/test3.4/test.c b/regression/strings/test3.4/test.c new file mode 100644 index 00000000000..70931d803d1 --- /dev/null +++ b/regression/strings/test3.4/test.c @@ -0,0 +1,18 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s, s2, s3; + int i; + + s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(__CPROVER_string_length(s2) == i); + __CPROVER_assume( + __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("p!o"), s)); + + return 0; +} diff --git a/regression/strings/test3.4/test.desc b/regression/strings/test3.4/test.desc new file mode 100644 index 00000000000..7b9eff42312 --- /dev/null +++ b/regression/strings/test3.4/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--cvc4 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- diff --git a/regression/strings/test5/test.c b/regression/strings/test5/test.c new file mode 100644 index 00000000000..038bbfeefda --- /dev/null +++ b/regression/strings/test5/test.c @@ -0,0 +1,13 @@ +#include +#include "../cprover-string-hack.h" + + +void main() +{ + __CPROVER_string x, y, z, w; + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && + __CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c"))) && + __CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("c"), y), __CPROVER_string_concat(__CPROVER_string_literal("c"), __CPROVER_string_concat(__CPROVER_string_literal("b"), __CPROVER_string_literal("c"))))) { + assert(0); + } +} diff --git a/regression/strings/test5/test.desc b/regression/strings/test5/test.desc new file mode 100644 index 00000000000..7b9eff42312 --- /dev/null +++ b/regression/strings/test5/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--cvc4 +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION FAILED$ +-- diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index 0c6a54d7075..f924b92034d 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -5049,6 +5049,10 @@ void smt2_convt::define_string_equal(const function_application_exprt &f) void smt2_convt::define_string_literal(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + const function_application_exprt::argumentst &args = f.arguments(); if (args.size() != 1) { UNEXPECTEDCASE("args mismatch in string_literal"); @@ -5087,6 +5091,10 @@ void smt2_convt::define_string_literal(const function_application_exprt &f) void smt2_convt::define_char_literal(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + const function_application_exprt::argumentst &args = f.arguments(); if (args.size() != 1) { UNEXPECTEDCASE("args mismatch in string_literal"); @@ -5120,6 +5128,10 @@ void smt2_convt::define_char_literal(const function_application_exprt &f) void smt2_convt::define_string_concat(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + std::string index = i2string(defined_expressions.size()); irep_idt id="string_concat." + index; const function_application_exprt::argumentst &args = f.arguments(); @@ -5154,6 +5166,10 @@ void smt2_convt::define_string_concat(const function_application_exprt &f) void smt2_convt::define_string_substring(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + std::string index = i2string(defined_expressions.size()); irep_idt id="string_substring." + index; const function_application_exprt::argumentst &args = f.arguments(); @@ -5201,6 +5217,10 @@ void smt2_convt::define_string_substring(const function_application_exprt &f) void smt2_convt::define_string_is_prefix(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + std::string index = i2string(defined_expressions.size()); irep_idt id="string_isprefix." + index; const function_application_exprt::argumentst &args = f.arguments(); @@ -5244,6 +5264,10 @@ void smt2_convt::define_string_is_prefix(const function_application_exprt &f) void smt2_convt::define_string_is_suffix(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + std::string index = i2string(defined_expressions.size()); irep_idt id="string_issuffix." + index; const function_application_exprt::argumentst &args = f.arguments(); @@ -5290,6 +5314,10 @@ void smt2_convt::define_string_is_suffix(const function_application_exprt &f) void smt2_convt::define_string_char_set(const function_application_exprt &f) { + if (defined_expressions.find(f) != defined_expressions.end()) { + return; + } + irep_idt id="string_char_set."+i2string(defined_expressions.size()); const function_application_exprt::argumentst &args = f.arguments(); defined_expressions[f] = id; From 4b84909da42fe4e850aafa83e55da5ae62f75451 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 1 Jul 2016 16:52:59 +0200 Subject: [PATCH 016/221] added various string benchmarks taken from z3str2-bv --- .../strings/Z3str2-bv/concat-000/test.c | 18 + .../Z3str2-bv/concat-000/test.c.qarr.smt2 | 332 ++++++++ .../Z3str2-bv/concat-000/test.c.str.smt2 | 263 +++++++ .../strings/Z3str2-bv/concat-001/test.c | 14 + .../Z3str2-bv/concat-001/test.c.qarr.smt2 | 209 +++++ .../Z3str2-bv/concat-001/test.c.str.smt2 | 165 ++++ .../strings/Z3str2-bv/concat-002/test.c | 17 + .../Z3str2-bv/concat-002/test.c.qarr.smt2 | 265 +++++++ .../Z3str2-bv/concat-002/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-003/test.c | 15 + .../Z3str2-bv/concat-003/test.c.qarr.smt2 | 228 ++++++ .../Z3str2-bv/concat-003/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-004-unsat/test.c | 15 + .../concat-004-unsat/test.c.qarr.smt2 | 227 ++++++ .../concat-004-unsat/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-005-unsat/test.c | 14 + .../concat-005-unsat/test.c.qarr.smt2 | 177 +++++ .../concat-005-unsat/test.c.str.smt2 | 143 ++++ .../strings/Z3str2-bv/concat-006/test.c | 14 + .../Z3str2-bv/concat-006/test.c.qarr.smt2 | 177 +++++ .../Z3str2-bv/concat-006/test.c.str.smt2 | 143 ++++ .../strings/Z3str2-bv/concat-007/test.c | 14 + .../Z3str2-bv/concat-007/test.c.qarr.smt2 | 176 +++++ .../Z3str2-bv/concat-007/test.c.str.smt2 | 143 ++++ .../strings/Z3str2-bv/concat-008/test.c | 14 + .../Z3str2-bv/concat-008/test.c.qarr.smt2 | 216 +++++ .../Z3str2-bv/concat-008/test.c.str.smt2 | 166 ++++ .../strings/Z3str2-bv/concat-009/test.c | 14 + .../Z3str2-bv/concat-009/test.c.qarr.smt2 | 217 ++++++ .../Z3str2-bv/concat-009/test.c.str.smt2 | 166 ++++ .../strings/Z3str2-bv/concat-010/test.c | 14 + .../Z3str2-bv/concat-010/test.c.qarr.smt2 | 216 +++++ .../Z3str2-bv/concat-010/test.c.str.smt2 | 166 ++++ .../strings/Z3str2-bv/concat-011/test.c | 14 + .../Z3str2-bv/concat-011/test.c.qarr.smt2 | 218 ++++++ .../Z3str2-bv/concat-011/test.c.str.smt2 | 166 ++++ .../strings/Z3str2-bv/concat-012/test.c | 14 + .../Z3str2-bv/concat-012/test.c.qarr.smt2 | 197 +++++ .../Z3str2-bv/concat-012/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-013/test.c | 15 + .../Z3str2-bv/concat-013/test.c.qarr.smt2 | 235 ++++++ .../Z3str2-bv/concat-013/test.c.str.smt2 | 194 +++++ .../strings/Z3str2-bv/concat-014/test.c | 12 + .../Z3str2-bv/concat-014/test.c.qarr.smt2 | 152 ++++ .../Z3str2-bv/concat-014/test.c.str.smt2 | 129 +++ .../strings/Z3str2-bv/concat-015/test.c | 14 + .../Z3str2-bv/concat-015/test.c.qarr.smt2 | 348 +++++++++ .../Z3str2-bv/concat-015/test.c.str.smt2 | 295 +++++++ .../strings/Z3str2-bv/concat-016-unsat/test.c | 12 + .../concat-016-unsat/test.c.qarr.smt2 | 162 ++++ .../concat-016-unsat/test.c.str.smt2 | 129 +++ .../strings/Z3str2-bv/concat-017/test.c | 12 + .../Z3str2-bv/concat-017/test.c.qarr.smt2 | 161 ++++ .../Z3str2-bv/concat-017/test.c.str.smt2 | 129 +++ .../strings/Z3str2-bv/concat-018/test.c | 16 + .../Z3str2-bv/concat-018/test.c.qarr.smt2 | 317 ++++++++ .../Z3str2-bv/concat-018/test.c.str.smt2 | 254 ++++++ .../strings/Z3str2-bv/concat-019-unsat/test.c | 12 + .../concat-019-unsat/test.c.qarr.smt2 | 162 ++++ .../concat-019-unsat/test.c.str.smt2 | 129 +++ .../strings/Z3str2-bv/concat-020/test.c | 13 + .../Z3str2-bv/concat-020/test.c.qarr.smt2 | 143 ++++ .../Z3str2-bv/concat-020/test.c.str.smt2 | 124 +++ .../strings/Z3str2-bv/concat-021/test.c | 16 + .../Z3str2-bv/concat-021/test.c.qarr.smt2 | 500 ++++++++++++ .../Z3str2-bv/concat-021/test.c.str.smt2 | 426 ++++++++++ .../strings/Z3str2-bv/concat-022/test.c | 16 + .../Z3str2-bv/concat-022/test.c.qarr.smt2 | 736 ++++++++++++++++++ .../Z3str2-bv/concat-022/test.c.str.smt2 | 631 +++++++++++++++ .../strings/Z3str2-bv/concat-023/test.c | 17 + .../Z3str2-bv/concat-023/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-023/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-024/test.c | 15 + .../Z3str2-bv/concat-024/test.c.qarr.smt2 | 165 ++++ .../Z3str2-bv/concat-024/test.c.str.smt2 | 137 ++++ .../strings/Z3str2-bv/concat-025/test.c | 18 + .../Z3str2-bv/concat-025/test.c.qarr.smt2 | 244 ++++++ .../Z3str2-bv/concat-025/test.c.str.smt2 | 220 ++++++ .../strings/Z3str2-bv/concat-026/test.c | 17 + .../Z3str2-bv/concat-026/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-026/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-027/test.c | 17 + .../Z3str2-bv/concat-027/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-027/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-028/test.c | 17 + .../Z3str2-bv/concat-028/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-028/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-029/test.c | 17 + .../Z3str2-bv/concat-029/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-029/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-030/test.c | 17 + .../Z3str2-bv/concat-030/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-030/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-031/test.c | 17 + .../Z3str2-bv/concat-031/test.c.qarr.smt2 | 237 ++++++ .../Z3str2-bv/concat-031/test.c.str.smt2 | 213 +++++ .../strings/Z3str2-bv/concat-032/test.c | 19 + .../Z3str2-bv/concat-032/test.c.qarr.smt2 | 309 ++++++++ .../Z3str2-bv/concat-032/test.c.str.smt2 | 289 +++++++ .../strings/Z3str2-bv/concat-033/test.c | 14 + .../Z3str2-bv/concat-033/test.c.qarr.smt2 | 174 +++++ .../Z3str2-bv/concat-033/test.c.str.smt2 | 142 ++++ .../strings/Z3str2-bv/concat-034/test.c | 14 + .../Z3str2-bv/concat-034/test.c.qarr.smt2 | 209 +++++ .../Z3str2-bv/concat-034/test.c.str.smt2 | 165 ++++ .../strings/Z3str2-bv/concat-035/test.c | 16 + .../Z3str2-bv/concat-035/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-035/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-036/test.c | 15 + .../Z3str2-bv/concat-036/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-036/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/concat-037/test.c | 15 + .../Z3str2-bv/concat-037/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-037/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/concat-038/test.c | 16 + .../Z3str2-bv/concat-038/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-038/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-039/test.c | 16 + .../Z3str2-bv/concat-039/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-039/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-040/test.c | 16 + .../Z3str2-bv/concat-040/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-040/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-041/test.c | 16 + .../Z3str2-bv/concat-041/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-041/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-042/test.c | 15 + .../Z3str2-bv/concat-042/test.c.qarr.smt2 | 200 +++++ .../Z3str2-bv/concat-042/test.c.str.smt2 | 160 ++++ .../strings/Z3str2-bv/concat-043/test.c | 14 + .../Z3str2-bv/concat-043/test.c.qarr.smt2 | 174 +++++ .../Z3str2-bv/concat-043/test.c.str.smt2 | 142 ++++ .../strings/Z3str2-bv/concat-044/test.c | 15 + .../Z3str2-bv/concat-044/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-044/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/concat-045/test.c | 15 + .../Z3str2-bv/concat-045/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-045/test.c.str.smt2 | 203 +++++ .../strings/Z3str2-bv/concat-046/test.c | 16 + .../Z3str2-bv/concat-046/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-046/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-047-unsat/test.c | 17 + .../concat-047-unsat/test.c.qarr.smt2 | 282 +++++++ .../concat-047-unsat/test.c.str.smt2 | 256 ++++++ .../strings/Z3str2-bv/concat-048/test.c | 16 + .../Z3str2-bv/concat-048/test.c.qarr.smt2 | 246 ++++++ .../Z3str2-bv/concat-048/test.c.str.smt2 | 218 ++++++ .../strings/Z3str2-bv/concat-049/test.c | 17 + .../Z3str2-bv/concat-049/test.c.qarr.smt2 | 282 +++++++ .../Z3str2-bv/concat-049/test.c.str.smt2 | 256 ++++++ .../strings/Z3str2-bv/concat-050/test.c | 14 + .../Z3str2-bv/concat-050/test.c.qarr.smt2 | 193 +++++ .../Z3str2-bv/concat-050/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-051/test.c | 15 + .../Z3str2-bv/concat-051/test.c.qarr.smt2 | 229 ++++++ .../Z3str2-bv/concat-051/test.c.str.smt2 | 192 +++++ .../strings/Z3str2-bv/concat-052/test.c | 15 + .../Z3str2-bv/concat-052/test.c.qarr.smt2 | 221 ++++++ .../Z3str2-bv/concat-052/test.c.str.smt2 | 191 +++++ .../strings/Z3str2-bv/concat-053/test.c | 15 + .../Z3str2-bv/concat-053/test.c.qarr.smt2 | 230 ++++++ .../Z3str2-bv/concat-053/test.c.str.smt2 | 192 +++++ .../strings/Z3str2-bv/concat-054-unsat/test.c | 14 + .../concat-054-unsat/test.c.qarr.smt2 | 194 +++++ .../concat-054-unsat/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-055/test.c | 14 + .../Z3str2-bv/concat-055/test.c.qarr.smt2 | 197 +++++ .../Z3str2-bv/concat-055/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-056/test.c | 15 + .../Z3str2-bv/concat-056/test.c.qarr.smt2 | 233 ++++++ .../Z3str2-bv/concat-056/test.c.str.smt2 | 192 +++++ .../strings/Z3str2-bv/concat-057/test.c | 15 + .../Z3str2-bv/concat-057/test.c.qarr.smt2 | 233 ++++++ .../Z3str2-bv/concat-057/test.c.str.smt2 | 192 +++++ .../strings/Z3str2-bv/concat-058/test.c | 14 + .../Z3str2-bv/concat-058/test.c.qarr.smt2 | 191 +++++ .../Z3str2-bv/concat-058/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-059-unsat/test.c | 14 + .../concat-059-unsat/test.c.qarr.smt2 | 191 +++++ .../concat-059-unsat/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-060/test.c | 14 + .../Z3str2-bv/concat-060/test.c.qarr.smt2 | 189 +++++ .../Z3str2-bv/concat-060/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-061/test.c | 14 + .../Z3str2-bv/concat-061/test.c.qarr.smt2 | 193 +++++ .../Z3str2-bv/concat-061/test.c.str.smt2 | 154 ++++ .../strings/Z3str2-bv/concat-062/test.c | 15 + .../Z3str2-bv/concat-062/test.c.qarr.smt2 | 200 +++++ .../Z3str2-bv/concat-062/test.c.str.smt2 | 160 ++++ .../strings/Z3str2-bv/concat-063/test.c | 17 + .../Z3str2-bv/concat-063/test.c.qarr.smt2 | 272 +++++++ .../Z3str2-bv/concat-063/test.c.str.smt2 | 236 ++++++ .../strings/Z3str2-bv/concat-064/test.c | 15 + .../Z3str2-bv/concat-064/test.c.qarr.smt2 | 235 ++++++ .../Z3str2-bv/concat-064/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-065/test.c | 16 + .../Z3str2-bv/concat-065/test.c.qarr.smt2 | 271 +++++++ .../Z3str2-bv/concat-065/test.c.str.smt2 | 221 ++++++ .../strings/Z3str2-bv/concat-066/test.c | 15 + .../Z3str2-bv/concat-066/test.c.qarr.smt2 | 235 ++++++ .../Z3str2-bv/concat-066/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-067-unsat/test.c | 16 + .../concat-067-unsat/test.c.qarr.smt2 | 250 ++++++ .../concat-067-unsat/test.c.str.smt2 | 210 +++++ .../strings/Z3str2-bv/concat-068/test.c | 16 + .../Z3str2-bv/concat-068/test.c.qarr.smt2 | 280 +++++++ .../Z3str2-bv/concat-068/test.c.str.smt2 | 240 ++++++ .../strings/Z3str2-bv/concat-069/test.c | 15 + .../Z3str2-bv/concat-069/test.c.qarr.smt2 | 235 ++++++ .../Z3str2-bv/concat-069/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-070/test.c | 15 + .../Z3str2-bv/concat-070/test.c.qarr.smt2 | 270 +++++++ .../Z3str2-bv/concat-070/test.c.str.smt2 | 206 +++++ .../strings/Z3str2-bv/concat-071/test.c | 15 + .../Z3str2-bv/concat-071/test.c.qarr.smt2 | 238 ++++++ .../Z3str2-bv/concat-071/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/concat-072/test.c | 19 + .../Z3str2-bv/concat-072/test.c.qarr.smt2 | 325 ++++++++ .../Z3str2-bv/concat-072/test.c.str.smt2 | 260 +++++++ .../strings/Z3str2-bv/concat-073/test.c | 18 + .../Z3str2-bv/concat-073/test.c.qarr.smt2 | 335 ++++++++ .../Z3str2-bv/concat-073/test.c.str.smt2 | 267 +++++++ .../strings/Z3str2-bv/concat-074/test.c | 22 + .../Z3str2-bv/concat-074/test.c.qarr.smt2 | 537 +++++++++++++ .../Z3str2-bv/concat-074/test.c.str.smt2 | 423 ++++++++++ .../strings/Z3str2-bv/concat-075/test.c | 17 + .../Z3str2-bv/concat-075/test.c.qarr.smt2 | 358 +++++++++ .../Z3str2-bv/concat-075/test.c.str.smt2 | 284 +++++++ .../strings/Z3str2-bv/concat-076-unsat/test.c | 21 + .../concat-076-unsat/test.c.qarr.smt2 | 484 ++++++++++++ .../concat-076-unsat/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-077/test.c | 21 + .../Z3str2-bv/concat-077/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-077/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-078/test.c | 21 + .../Z3str2-bv/concat-078/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-078/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-079/test.c | 21 + .../Z3str2-bv/concat-079/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-079/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-080/test.c | 21 + .../Z3str2-bv/concat-080/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-080/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-081/test.c | 21 + .../Z3str2-bv/concat-081/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-081/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-082/test.c | 21 + .../Z3str2-bv/concat-082/test.c.qarr.smt2 | 484 ++++++++++++ .../Z3str2-bv/concat-082/test.c.str.smt2 | 388 +++++++++ .../strings/Z3str2-bv/concat-083/test.c | 23 + .../Z3str2-bv/concat-083/test.c.qarr.smt2 | 498 ++++++++++++ .../Z3str2-bv/concat-083/test.c.str.smt2 | 402 ++++++++++ .../strings/Z3str2-bv/concat-084/test.c | 24 + .../Z3str2-bv/concat-084/test.c.qarr.smt2 | 505 ++++++++++++ .../Z3str2-bv/concat-084/test.c.str.smt2 | 409 ++++++++++ .../strings/Z3str2-bv/concat-085/test.c | 18 + .../Z3str2-bv/concat-085/test.c.qarr.smt2 | 385 +++++++++ .../Z3str2-bv/concat-085/test.c.str.smt2 | 306 ++++++++ .../strings/Z3str2-bv/concat-086/test.c | 23 + .../Z3str2-bv/concat-086/test.c.qarr.smt2 | 586 ++++++++++++++ .../Z3str2-bv/concat-086/test.c.str.smt2 | 454 +++++++++++ .../strings/Z3str2-bv/concat-087/test.c | 14 + .../Z3str2-bv/concat-087/test.c.qarr.smt2 | 259 ++++++ .../Z3str2-bv/concat-087/test.c.str.smt2 | 207 +++++ .../strings/Z3str2-bv/concat-088/test.c | 16 + .../Z3str2-bv/concat-088/test.c.qarr.smt2 | 242 ++++++ .../Z3str2-bv/concat-088/test.c.str.smt2 | 200 +++++ .../strings/Z3str2-bv/concat-089/test.c | 16 + .../Z3str2-bv/concat-089/test.c.qarr.smt2 | 296 +++++++ .../Z3str2-bv/concat-089/test.c.str.smt2 | 231 ++++++ .../strings/Z3str2-bv/concat-090/test.c | 18 + .../Z3str2-bv/concat-090/test.c.qarr.smt2 | 279 +++++++ .../Z3str2-bv/concat-090/test.c.str.smt2 | 221 ++++++ .../strings/Z3str2-bv/concat-091/test.c | 12 + .../Z3str2-bv/concat-091/test.c.qarr.smt2 | 172 ++++ .../Z3str2-bv/concat-091/test.c.str.smt2 | 140 ++++ .../strings/Z3str2-bv/concat-092/test.c | 14 + .../Z3str2-bv/concat-092/test.c.qarr.smt2 | 207 +++++ .../Z3str2-bv/concat-092/test.c.str.smt2 | 165 ++++ .../strings/Z3str2-bv/concat-093/test.c | 20 + .../Z3str2-bv/concat-093/test.c.qarr.smt2 | 448 +++++++++++ .../Z3str2-bv/concat-093/test.c.str.smt2 | 350 +++++++++ .../strings/Z3str2-bv/concat-094/test.c | 16 + .../Z3str2-bv/concat-094/test.c.qarr.smt2 | 0 .../Z3str2-bv/concat-094/test.c.str.smt2 | 0 .../strings/Z3str2-bv/concat-095/test.c | 15 + .../Z3str2-bv/concat-095/test.c.qarr.smt2 | 215 +++++ .../Z3str2-bv/concat-095/test.c.str.smt2 | 173 ++++ .../strings/Z3str2-bv/concat-096/test.c | 20 + .../Z3str2-bv/concat-096/test.c.qarr.smt2 | 445 +++++++++++ .../Z3str2-bv/concat-096/test.c.str.smt2 | 350 +++++++++ .../strings/Z3str2-bv/concat-097/test.c | 15 + .../Z3str2-bv/concat-097/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-097/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/concat-098/test.c | 15 + .../Z3str2-bv/concat-098/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-098/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/concat-099/test.c | 15 + .../Z3str2-bv/concat-099/test.c.qarr.smt2 | 210 +++++ .../Z3str2-bv/concat-099/test.c.str.smt2 | 180 +++++ .../strings/Z3str2-bv/length-001/test.c | 12 + .../Z3str2-bv/length-001/test.c.qarr.smt2 | 96 +++ .../Z3str2-bv/length-001/test.c.str.smt2 | 100 +++ .../strings/Z3str2-bv/length-002/test.c | 14 + .../Z3str2-bv/length-002/test.c.qarr.smt2 | 297 +++++++ .../Z3str2-bv/length-002/test.c.str.smt2 | 274 +++++++ .../strings/Z3str2-bv/length-003/test.c | 15 + .../Z3str2-bv/length-003/test.c.qarr.smt2 | 205 +++++ .../Z3str2-bv/length-003/test.c.str.smt2 | 183 +++++ .../strings/Z3str2-bv/length-004/test.c | 15 + .../Z3str2-bv/length-004/test.c.qarr.smt2 | 327 ++++++++ .../Z3str2-bv/length-004/test.c.str.smt2 | 293 +++++++ .../strings/Z3str2-bv/length-005/test.c | 15 + .../Z3str2-bv/length-005/test.c.qarr.smt2 | 219 ++++++ .../Z3str2-bv/length-005/test.c.str.smt2 | 200 +++++ .../strings/Z3str2-bv/length-006/test.c | 13 + .../Z3str2-bv/length-006/test.c.qarr.smt2 | 124 +++ .../Z3str2-bv/length-006/test.c.str.smt2 | 118 +++ .../strings/Z3str2-bv/length-007/test.c | 18 + .../Z3str2-bv/length-007/test.c.qarr.smt2 | 328 ++++++++ .../Z3str2-bv/length-007/test.c.str.smt2 | 284 +++++++ .../strings/Z3str2-bv/length-008/test.c | 18 + .../Z3str2-bv/length-008/test.c.qarr.smt2 | 303 +++++++ .../Z3str2-bv/length-008/test.c.str.smt2 | 265 +++++++ .../strings/Z3str2-bv/length-009/test.c | 14 + .../Z3str2-bv/length-009/test.c.qarr.smt2 | 156 ++++ .../Z3str2-bv/length-009/test.c.str.smt2 | 157 ++++ 327 files changed, 55194 insertions(+) create mode 100644 regression/strings/Z3str2-bv/concat-000/test.c create mode 100644 regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-001/test.c create mode 100644 regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-002/test.c create mode 100644 regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-003/test.c create mode 100644 regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-006/test.c create mode 100644 regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-007/test.c create mode 100644 regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-008/test.c create mode 100644 regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-009/test.c create mode 100644 regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-010/test.c create mode 100644 regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-011/test.c create mode 100644 regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-012/test.c create mode 100644 regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-013/test.c create mode 100644 regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-014/test.c create mode 100644 regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-015/test.c create mode 100644 regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-017/test.c create mode 100644 regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-018/test.c create mode 100644 regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-020/test.c create mode 100644 regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-021/test.c create mode 100644 regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-022/test.c create mode 100644 regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-023/test.c create mode 100644 regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-024/test.c create mode 100644 regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-025/test.c create mode 100644 regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-026/test.c create mode 100644 regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-027/test.c create mode 100644 regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-028/test.c create mode 100644 regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-029/test.c create mode 100644 regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-030/test.c create mode 100644 regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-031/test.c create mode 100644 regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-032/test.c create mode 100644 regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-033/test.c create mode 100644 regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-034/test.c create mode 100644 regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-035/test.c create mode 100644 regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-036/test.c create mode 100644 regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-037/test.c create mode 100644 regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-038/test.c create mode 100644 regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-039/test.c create mode 100644 regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-040/test.c create mode 100644 regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-041/test.c create mode 100644 regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-042/test.c create mode 100644 regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-043/test.c create mode 100644 regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-044/test.c create mode 100644 regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-045/test.c create mode 100644 regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-046/test.c create mode 100644 regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-048/test.c create mode 100644 regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-049/test.c create mode 100644 regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-050/test.c create mode 100644 regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-051/test.c create mode 100644 regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-052/test.c create mode 100644 regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-053/test.c create mode 100644 regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-055/test.c create mode 100644 regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-056/test.c create mode 100644 regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-057/test.c create mode 100644 regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-058/test.c create mode 100644 regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-060/test.c create mode 100644 regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-061/test.c create mode 100644 regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-062/test.c create mode 100644 regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-063/test.c create mode 100644 regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-064/test.c create mode 100644 regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-065/test.c create mode 100644 regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-066/test.c create mode 100644 regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-068/test.c create mode 100644 regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-069/test.c create mode 100644 regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-070/test.c create mode 100644 regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-071/test.c create mode 100644 regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-072/test.c create mode 100644 regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-073/test.c create mode 100644 regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-074/test.c create mode 100644 regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-075/test.c create mode 100644 regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c create mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-077/test.c create mode 100644 regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-078/test.c create mode 100644 regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-079/test.c create mode 100644 regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-080/test.c create mode 100644 regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-081/test.c create mode 100644 regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-082/test.c create mode 100644 regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-083/test.c create mode 100644 regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-084/test.c create mode 100644 regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-085/test.c create mode 100644 regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-086/test.c create mode 100644 regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-087/test.c create mode 100644 regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-088/test.c create mode 100644 regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-089/test.c create mode 100644 regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-090/test.c create mode 100644 regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-091/test.c create mode 100644 regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-092/test.c create mode 100644 regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-093/test.c create mode 100644 regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-094/test.c create mode 100644 regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-095/test.c create mode 100644 regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-096/test.c create mode 100644 regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-097/test.c create mode 100644 regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-098/test.c create mode 100644 regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-099/test.c create mode 100644 regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-001/test.c create mode 100644 regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-001/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-002/test.c create mode 100644 regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-002/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-003/test.c create mode 100644 regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-003/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-004/test.c create mode 100644 regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-004/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-005/test.c create mode 100644 regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-005/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-006/test.c create mode 100644 regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-006/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-007/test.c create mode 100644 regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-007/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-008/test.c create mode 100644 regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-008/test.c.str.smt2 create mode 100644 regression/strings/Z3str2-bv/length-009/test.c create mode 100644 regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 create mode 100644 regression/strings/Z3str2-bv/length-009/test.c.str.smt2 diff --git a/regression/strings/Z3str2-bv/concat-000/test.c b/regression/strings/Z3str2-bv/concat-000/test.c new file mode 100644 index 00000000000..105b5c455be --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-000/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string c1; + __CPROVER_string c2; + __CPROVER_string x; + + if (__CPROVER_string_equal(a, __CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("te"), c1), __CPROVER_string_concat(__CPROVER_string_literal(" "), c2))) + && __CPROVER_string_equal(a, b) + && __CPROVER_string_equal(x, __CPROVER_string_literal("str "))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 new file mode 100644 index 00000000000..2dba740a907 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 @@ -0,0 +1,332 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::c1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::c1!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv9 8))) +(assert (= (cprover.str.len string.3) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::c2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::c2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.4) + +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::a!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.6)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::1::a!0@1#1|) +(define-fun string_equal.s2.7 () cprover.String |main::1::b!0@1#1|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.7)) + +(declare-fun string.8 () cprover.String) +(assert (= (select string.8 (_ bv0 32)) (_ bv115 8))) +(assert (= (select string.8 (_ bv1 32)) (_ bv116 8))) +(assert (= (select string.8 (_ bv2 32)) (_ bv114 8))) +(assert (= (select string.8 (_ bv3 32)) (_ bv32 8))) +(assert (= (select string.8 (_ bv4 32)) (_ bv32 8))) +(assert (= (cprover.str.len string.8) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.8) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.9 () Bool) +(define-fun string_equal.s1.9 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.9 () cprover.Pos) +(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) +(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) +(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.9)) + +; convert +(define-fun |B9| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::c1!0@1#1| |main::1::c1!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::c2!0@1#1| |main::1::c2!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::c1!0@1#1|)) +(get-value (|main::1::c2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 new file mode 100644 index 00000000000..72d69607640 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 @@ -0,0 +1,263 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "te") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::c1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::c1!0@1#1|)) + +(define-fun string.2 () cprover.String " ") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::c2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::c2!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::a!0@1#1| |main::1::b!0@1#1|))) + +(define-fun string.3 () cprover.String "str ") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B9| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::c1!0@1#1| |main::1::c1!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::c2!0@1#1| |main::1::c2!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::c1!0@1#1|)) +(get-value (|main::1::c2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-001/test.c b/regression/strings/Z3str2-bv/concat-001/test.c new file mode 100644 index 00000000000..0ae5dc8bd85 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-001/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y1; + __CPROVER_string y2; + + if (__CPROVER_string_equal(x, __CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("te"), y1), __CPROVER_string_concat(__CPROVER_string_literal("st"), y2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 new file mode 100644 index 00000000000..3f82208c20f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 @@ -0,0 +1,209 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y1!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.3) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 new file mode 100644 index 00000000000..5959a91332f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 @@ -0,0 +1,165 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "te") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::y1!0@1#1|)) + +(define-fun string.2 () cprover.String "st") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y2!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-002/test.c b/regression/strings/Z3str2-bv/concat-002/test.c new file mode 100644 index 00000000000..7b7c156a178 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-002/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + unsigned int i; + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(x, y), z), __CPROVER_string_literal("teest")) + && __CPROVER_string_equal(y, __CPROVER_string_literal("es")) + && (i == 15)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 new file mode 100644 index 00000000000..4ff3fcefbee --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 @@ -0,0 +1,265 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.3) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv115 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::1::i!0@1#1| (_ bv15 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B19| () Bool (not (= |main::1::i!0@1#1| (_ bv15 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 new file mode 100644 index 00000000000..72e65b6b8a1 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::1::z!0@1#1|)) + +(define-fun string.1 () cprover.String "teest") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) + +(define-fun string.2 () cprover.String "es") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::1::i!0@1#1| (_ bv15 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B19| () Bool (not (= |main::1::i!0@1#1| (_ bv15 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-003/test.c b/regression/strings/Z3str2-bv/concat-003/test.c new file mode 100644 index 00000000000..9c120c645ad --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-003/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("testhello")) + && __CPROVER_string_equal(a, __CPROVER_string_literal("testhe"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 new file mode 100644 index 00000000000..82e5caa33a7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 @@ -0,0 +1,228 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.2) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.4 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.4 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.4 (_ bv5 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.4) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::a!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) + +; convert +(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 new file mode 100644 index 00000000000..ea25844d65c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) + +(define-fun string.1 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) + +(define-fun string.2 () cprover.String "testhe") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c b/regression/strings/Z3str2-bv/concat-004-unsat/test.c new file mode 100644 index 00000000000..c1104b203fa --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-004-unsat/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("testhello")) + && __CPROVER_string_equal(a, __CPROVER_string_literal("hello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..8f9f5409883 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 @@ -0,0 +1,227 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.2) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv108 8))) +(assert (= (select string.4 (_ bv3 32)) (_ bv108 8))) +(assert (= (select string.4 (_ bv4 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.4) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::a!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) + +; convert +(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..01d6b232377 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) + +(define-fun string.1 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) + +(define-fun string.2 () cprover.String "hello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c b/regression/strings/Z3str2-bv/concat-005-unsat/test.c new file mode 100644 index 00000000000..56a8f70044a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-005-unsat/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("testhello")), __CPROVER_string_literal("hello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..5677114260a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 @@ -0,0 +1,177 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.1) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.3) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..8a8287c4fac --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 @@ -0,0 +1,143 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "hello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-006/test.c b/regression/strings/Z3str2-bv/concat-006/test.c new file mode 100644 index 00000000000..af55bc5fd47 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-006/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("hello")), __CPROVER_string_literal("testhello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 new file mode 100644 index 00000000000..1c3ade89513 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 @@ -0,0 +1,177 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.1) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.3) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 new file mode 100644 index 00000000000..679fde9eee0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 @@ -0,0 +1,143 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "hello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-007/test.c b/regression/strings/Z3str2-bv/concat-007/test.c new file mode 100644 index 00000000000..e11738b5404 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-007/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), a), __CPROVER_string_literal("testhello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 new file mode 100644 index 00000000000..ecc59e9a31e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 @@ -0,0 +1,176 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.3) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 new file mode 100644 index 00000000000..4ee780177da --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 @@ -0,0 +1,143 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "test") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) + +(define-fun string.2 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-008/test.c b/regression/strings/Z3str2-bv/concat-008/test.c new file mode 100644 index 00000000000..2e71ae65422 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-008/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("test"), a), __CPROVER_string_literal("num")), __CPROVER_string_literal("testhellonum"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 new file mode 100644 index 00000000000..1be473a8f81 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 @@ -0,0 +1,216 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) +(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) +(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) +(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.5) (_ bv12 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 new file mode 100644 index 00000000000..9257d341cdc --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 @@ -0,0 +1,166 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "test") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) + +(define-fun string.2 () cprover.String "num") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +(define-fun string.3 () cprover.String "testhellonum") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-009/test.c b/regression/strings/Z3str2-bv/concat-009/test.c new file mode 100644 index 00000000000..32642a3edcb --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-009/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(a, __CPROVER_string_literal("hello")), __CPROVER_string_literal("num")), __CPROVER_string_literal("testhellonum"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 new file mode 100644 index 00000000000..9fff1e965a8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 @@ -0,0 +1,217 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.1) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) +(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) +(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) +(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.5) (_ bv12 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 new file mode 100644 index 00000000000..3e566a08d55 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 @@ -0,0 +1,166 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "hello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "num") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +(define-fun string.3 () cprover.String "testhellonum") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-010/test.c b/regression/strings/Z3str2-bv/concat-010/test.c new file mode 100644 index 00000000000..69406aa5cb6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-010/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), __CPROVER_string_concat(a, __CPROVER_string_literal("num"))), __CPROVER_string_literal("testhellonum"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 new file mode 100644 index 00000000000..6a3a02ae1e7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 @@ -0,0 +1,216 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv110 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv117 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) +(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) +(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) +(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.5) (_ bv12 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 new file mode 100644 index 00000000000..cecda085b42 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 @@ -0,0 +1,166 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "test") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(define-fun string.2 () cprover.String "num") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +(define-fun string.3 () cprover.String "testhellonum") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-011/test.c b/regression/strings/Z3str2-bv/concat-011/test.c new file mode 100644 index 00000000000..de7eff6bb9a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-011/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), __CPROVER_string_concat(__CPROVER_string_literal("hello"), a)), __CPROVER_string_literal("testhellonum"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 new file mode 100644 index 00000000000..d005c8e8483 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv3 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv4 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.2) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::a!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) +(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) +(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) +(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.5) (_ bv12 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 new file mode 100644 index 00000000000..1dc16a33d95 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 @@ -0,0 +1,166 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "test") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(define-fun string.2 () cprover.String "hello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::a!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +(define-fun string.3 () cprover.String "testhellonum") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-012/test.c b/regression/strings/Z3str2-bv/concat-012/test.c new file mode 100644 index 00000000000..dc625f28b85 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-012/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_literal("testnumnum"), __CPROVER_string_concat(y, __CPROVER_string_concat(__CPROVER_string_literal("num"), x)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 new file mode 100644 index 00000000000..1382996a800 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 @@ -0,0 +1,197 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv110 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv117 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv109 8))) +(assert (= (select string.1 (_ bv7 32)) (_ bv110 8))) +(assert (= (select string.1 (_ bv8 32)) (_ bv117 8))) +(assert (= (select string.1 (_ bv9 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.1) (_ bv10 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv110 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv117 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 new file mode 100644 index 00000000000..f8f8d41d1b8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "testnumnum") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(define-fun string.2 () cprover.String "num") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-013/test.c b/regression/strings/Z3str2-bv/concat-013/test.c new file mode 100644 index 00000000000..fbafb1aebbb --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-013/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(z, __CPROVER_string_literal("b")), __CPROVER_string_concat(x, y)) + && __CPROVER_string_equal(z, __CPROVER_string_literal(""))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 new file mode 100644 index 00000000000..c59b0066b7d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 @@ -0,0 +1,235 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (cprover.str.len string.5) (_ bv0 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) + +; convert +(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 new file mode 100644 index 00000000000..92976a579e5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 @@ -0,0 +1,194 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(define-fun string.2 () cprover.String "") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-014/test.c b/regression/strings/Z3str2-bv/concat-014/test.c new file mode 100644 index 00000000000..a90a5b29642 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-014/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("")), __CPROVER_string_literal("num"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 new file mode 100644 index 00000000000..d0d99ad9e47 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 @@ -0,0 +1,152 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (cprover.str.len string.1) (_ bv0 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 new file mode 100644 index 00000000000..e63b9557c22 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 @@ -0,0 +1,129 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "num") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-015/test.c b/regression/strings/Z3str2-bv/concat-015/test.c new file mode 100644 index 00000000000..b6659c70a21 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-015/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + + if ((__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("te")) || __CPROVER_string_equal(__CPROVER_string_concat(b, a), __CPROVER_string_literal("te"))) + && __CPROVER_string_equal(b, __CPROVER_string_literal("t"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 new file mode 100644 index 00000000000..68f12aad014 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 @@ -0,0 +1,348 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$9!0@1#5| () Bool) +; convert +(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B10| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B11| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B12| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B13| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B14| () Bool (and |main::$tmp::tmp_if_expr$9!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.2) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$9!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#3| () Bool |main::$tmp::tmp_if_expr$9!0@1#1|) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::b!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::a!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.4) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool string_equal.5) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$9!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::tmp_if_expr$9!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +(declare-fun string.6 () cprover.String) +(assert (= (select string.6 (_ bv0 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.6) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::1::b!0@1#1|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.7)) + +; convert +(define-fun |B15| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::$tmp::tmp_if_expr$9!0@1#1| |main::$tmp::tmp_if_expr$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::tmp_if_expr$9!0@1#5|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::tmp_if_expr$9!0@1#5|)) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#5|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 new file mode 100644 index 00000000000..e2e6a109e26 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 @@ -0,0 +1,295 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$9!0@1#5| () Bool) +; convert +(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B10| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B11| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B12| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; convert +(define-fun |B13| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B14| () Bool (and |main::$tmp::tmp_if_expr$9!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) + +(define-fun string.1 () cprover.String "te") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$9!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#3| () Bool |main::$tmp::tmp_if_expr$9!0@1#1|) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::b!0@1#1| |main::1::a!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$9!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$9!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::tmp_if_expr$9!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +(define-fun string.2 () cprover.String "t") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::b!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B15| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::$tmp::tmp_if_expr$9!0@1#1| |main::$tmp::tmp_if_expr$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::tmp_if_expr$9!0@1#5|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::tmp_if_expr$9!0@1#5|)) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$9!0@1#5|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c b/regression/strings/Z3str2-bv/concat-016-unsat/test.c new file mode 100644 index 00000000000..827ed8e012b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-016-unsat/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("tesk"), a), __CPROVER_string_literal("testhello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..95c403a48d2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 @@ -0,0 +1,162 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv107 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.3) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..f6712996e9f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 @@ -0,0 +1,129 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "tesk") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) + +(define-fun string.2 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-017/test.c b/regression/strings/Z3str2-bv/concat-017/test.c new file mode 100644 index 00000000000..b3b171a866e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-017/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("llo")), __CPROVER_string_literal("testhello"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 new file mode 100644 index 00000000000..ab40285d91f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 @@ -0,0 +1,161 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.3) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 new file mode 100644 index 00000000000..1bac9f0c4ba --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 @@ -0,0 +1,129 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "llo") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-018/test.c b/regression/strings/Z3str2-bv/concat-018/test.c new file mode 100644 index 00000000000..91300ceb58a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-018/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_literal("testHello")) + && __CPROVER_string_equal(__CPROVER_string_concat(y, z), __CPROVER_string_literal("low")) + && !(__CPROVER_string_equal(y, __CPROVER_string_literal("")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 new file mode 100644 index 00000000000..f8f5ac4597e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 @@ -0,0 +1,317 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv4 32)) (_ bv72 8))) +(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.2) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.4) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv108 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv111 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv119 8))) +(assert (= (cprover.str.len string.5) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.6)) + +(declare-fun string.7 () cprover.String) +(assert (= (cprover.str.len string.7) (_ bv0 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.8)) + +; convert +(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to false +(assert (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B26| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 new file mode 100644 index 00000000000..c4cdc8cc946 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 @@ -0,0 +1,254 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "testHello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|))) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::z!0@1#1|)) + +(define-fun string.2 () cprover.String "low") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) + +(define-fun string.3 () cprover.String "") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to false +(assert (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B26| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c b/regression/strings/Z3str2-bv/concat-019-unsat/test.c new file mode 100644 index 00000000000..10da2f53dfe --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-019-unsat/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("testhello")), __CPROVER_string_literal("test"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..4ed3a39c28e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 @@ -0,0 +1,162 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.1 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.1) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) +(assert (= (cprover.str.len string.3) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..d8c4273632b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 @@ -0,0 +1,129 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "test") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-020/test.c b/regression/strings/Z3str2-bv/concat-020/test.c new file mode 100644 index 00000000000..6b607881a14 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-020/test.c @@ -0,0 +1,13 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string a; + __CPROVER_string b; + + if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal(""))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 new file mode 100644 index 00000000000..ff3a96e628a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 @@ -0,0 +1,143 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (cprover.str.len string.2) (_ bv0 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.3)) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 new file mode 100644 index 00000000000..01859168f67 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 @@ -0,0 +1,124 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::a!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::b!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) + +(define-fun string.1 () cprover.String "") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::a!0@1#1|)) +(get-value (|main::1::b!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-021/test.c b/regression/strings/Z3str2-bv/concat-021/test.c new file mode 100644 index 00000000000..27ec8cbdcdf --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-021/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), z) + && __CPROVER_string_equal(z, __CPROVER_string_literal("abcdef")) + && (__CPROVER_string_equal(x, __CPROVER_string_literal("abc")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcdef")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 new file mode 100644 index 00000000000..b06fdaa79db --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 @@ -0,0 +1,500 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) +; convert +(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$8!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.2 () Bool) +(define-fun string_equal.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(define-fun string_equal.s2.2 () cprover.String |main::1::z!0@1#1|) +(declare-fun string_equal.idx.2 () cprover.Pos) +(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) +(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) +(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.2)) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.3) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.5) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(declare-fun string.7 () cprover.String) +(assert (= (select string.7 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.7 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.7 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.7) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.8) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.9 () Bool) +(define-fun string_equal.s1.9 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(declare-fun string_equal.idx.9 () cprover.Pos) +(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) +(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) +(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool string_equal.9) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) + +; convert +(define-fun |B29| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B38| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B41| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$8!0@1#5|) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B47| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B48| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 new file mode 100644 index 00000000000..98ae9be8b43 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 @@ -0,0 +1,426 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) +; convert +(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$8!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| |main::1::z!0@1#1|))) + +(define-fun string.1 () cprover.String "abcdef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|))) + +(define-fun string.2 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(define-fun string.3 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) + +; convert +(define-fun |B29| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B38| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B41| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$8!0@1#5|) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B47| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B48| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-022/test.c b/regression/strings/Z3str2-bv/concat-022/test.c new file mode 100644 index 00000000000..778f04b5f95 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-022/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), z) + && (__CPROVER_string_equal(z, __CPROVER_string_literal("abcdef")) || __CPROVER_string_equal(z, __CPROVER_string_literal("aaaa")) || __CPROVER_string_equal(z, __CPROVER_string_literal("bbbb"))) + && (__CPROVER_string_equal(x, __CPROVER_string_literal("e")) || __CPROVER_string_equal(x, __CPROVER_string_literal("f")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcde")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 new file mode 100644 index 00000000000..55215d5eb3c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 @@ -0,0 +1,736 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B13| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B14| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$13!0@1#5| () Bool) +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B22| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$16!0@1#5| () Bool) +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B29| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B30| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B31| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B32| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B33| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B34| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B35| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B36| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B37| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B38| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B39| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B40| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B41| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B42| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B43| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B44| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B45| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) +; convert +(define-fun |B46| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.2 () Bool) +(define-fun string_equal.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|) +(define-fun string_equal.s2.2 () cprover.String |main::1::z!0@1#1|) +(declare-fun string_equal.idx.2 () cprover.Pos) +(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) +(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) +(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| string_equal.2)) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.3) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$13!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#3| () Bool |main::$tmp::tmp_if_expr$13!0@1#1|) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv97 8))) +(assert (= (select string.5 (_ bv2 32)) (_ bv97 8))) +(assert (= (select string.5 (_ bv3 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.5) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2| () cprover.String string.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool string_equal.6) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$13!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$16!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#3| () Bool |main::$tmp::tmp_if_expr$16!0@1#1|) + +(declare-fun string.7 () cprover.String) +(assert (= (select string.7 (_ bv0 32)) (_ bv98 8))) +(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.7 (_ bv2 32)) (_ bv98 8))) +(assert (= (select string.7 (_ bv3 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.7) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2| () cprover.String string.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2| () Bool string_equal.8) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$16!0@1#5| (or |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::tmp_if_expr$16!0@1#4|))) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) + +; string equal +(declare-fun string_equal.10 () Bool) +(define-fun string_equal.s1.10 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.10 () cprover.Pos) +(assert (=> string_equal.10 (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.10 (bvult ?n (cprover.str.len string_equal.s1.10))) (= (select string_equal.s1.10 ?n) (select string_equal.s2.10 ?n))))) +(assert (=> (not string_equal.10) (or (not (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10))) +(and (bvult string_equal.idx.10 (cprover.str.len string_equal.s1.10)) (not (= (select string_equal.s1.10 string_equal.idx.10) (select string_equal.s2.10 string_equal.idx.10))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.10)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(declare-fun string.11 () cprover.String) +(assert (= (select string.11 (_ bv0 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.11) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.12) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) + +(declare-fun string.13 () cprover.String) +(assert (= (select string.13 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.13 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.13 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.13 (_ bv3 32)) (_ bv100 8))) +(assert (= (select string.13 (_ bv4 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.13) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.13) + +; string equal +(declare-fun string_equal.14 () Bool) +(define-fun string_equal.s1.14 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(declare-fun string_equal.idx.14 () cprover.Pos) +(assert (=> string_equal.14 (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.14 (bvult ?n (cprover.str.len string_equal.s1.14))) (= (select string_equal.s1.14 ?n) (select string_equal.s2.14 ?n))))) +(assert (=> (not string_equal.14) (or (not (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14))) +(and (bvult string_equal.idx.14 (cprover.str.len string_equal.s1.14)) (not (= (select string_equal.s1.14 string_equal.idx.14) (select string_equal.s2.14 string_equal.idx.14))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool string_equal.14) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) + +; convert +(define-fun |B47| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B48| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B49| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| () cprover.String) +; convert +(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| () Bool) +; convert +(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B53| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; convert +(define-fun |B54| () Bool (= |main::$tmp::tmp_if_expr$13!0@1#1| |main::$tmp::tmp_if_expr$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| () cprover.String) +; convert +(define-fun |B55| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B56| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; convert +(define-fun |B57| () Bool (= |main::$tmp::tmp_if_expr$16!0@1#1| |main::$tmp::tmp_if_expr$16!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| () cprover.String) +; convert +(define-fun |B58| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| () Bool) +; convert +(define-fun |B59| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B60| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B61| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B62| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B63| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B64| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B65| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B66| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B67| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$16!0@1#5|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$8!0@1#5|) + +; convert +(define-fun |B68| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) + +; convert +(define-fun |B69| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B70| () Bool (not |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B71| () Bool (not |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B72| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B73| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B74| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B53|)) +(get-value (|B54|)) +(get-value (|B55|)) +(get-value (|B56|)) +(get-value (|B57|)) +(get-value (|B58|)) +(get-value (|B59|)) +(get-value (|B6|)) +(get-value (|B60|)) +(get-value (|B61|)) +(get-value (|B62|)) +(get-value (|B63|)) +(get-value (|B64|)) +(get-value (|B65|)) +(get-value (|B66|)) +(get-value (|B67|)) +(get-value (|B68|)) +(get-value (|B69|)) +(get-value (|B7|)) +(get-value (|B70|)) +(get-value (|B71|)) +(get-value (|B72|)) +(get-value (|B73|)) +(get-value (|B74|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 new file mode 100644 index 00000000000..81235191e30 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 @@ -0,0 +1,631 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) + +; convert +(define-fun |B13| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; convert +(define-fun |B14| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$13!0@1#5| () Bool) +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) + +; convert +(define-fun |B22| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$16!0@1#5| () Bool) +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B29| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B30| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B31| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B32| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B33| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B34| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B35| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B36| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B37| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B38| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B39| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B40| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B41| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B42| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B43| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B44| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) + +; convert +(define-fun |B45| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) +; convert +(define-fun |B46| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| |main::1::z!0@1#1|))) + +(define-fun string.1 () cprover.String "abcdef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$13!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#3| () Bool |main::$tmp::tmp_if_expr$13!0@1#1|) + +(define-fun string.2 () cprover.String "aaaa") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$13!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$13!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$16!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#3| () Bool |main::$tmp::tmp_if_expr$16!0@1#1|) + +(define-fun string.3 () cprover.String "bbbb") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2| () cprover.String string.3) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2| () Bool (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$16!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$16!0@1#5| (or |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::tmp_if_expr$16!0@1#4|))) + +(define-fun string.4 () cprover.String "e") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(define-fun string.5 () cprover.String "f") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.5) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) + +(define-fun string.6 () cprover.String "abcde") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.6) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) + +; convert +(define-fun |B47| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B48| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B49| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| () cprover.String) +; convert +(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| () Bool) +; convert +(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B53| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; convert +(define-fun |B54| () Bool (= |main::$tmp::tmp_if_expr$13!0@1#1| |main::$tmp::tmp_if_expr$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| () cprover.String) +; convert +(define-fun |B55| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B56| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; convert +(define-fun |B57| () Bool (= |main::$tmp::tmp_if_expr$16!0@1#1| |main::$tmp::tmp_if_expr$16!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| () cprover.String) +; convert +(define-fun |B58| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| () Bool) +; convert +(define-fun |B59| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B60| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B61| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B62| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B63| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B64| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B65| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B66| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B67| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$16!0@1#5|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$8!0@1#5|) + +; convert +(define-fun |B68| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) + +; convert +(define-fun |B69| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B70| () Bool (not |main::$tmp::tmp_if_expr$13!0@1#5|)) + +; convert +(define-fun |B71| () Bool (not |main::$tmp::tmp_if_expr$16!0@1#5|)) + +; convert +(define-fun |B72| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B73| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; convert +(define-fun |B74| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B53|)) +(get-value (|B54|)) +(get-value (|B55|)) +(get-value (|B56|)) +(get-value (|B57|)) +(get-value (|B58|)) +(get-value (|B59|)) +(get-value (|B6|)) +(get-value (|B60|)) +(get-value (|B61|)) +(get-value (|B62|)) +(get-value (|B63|)) +(get-value (|B64|)) +(get-value (|B65|)) +(get-value (|B66|)) +(get-value (|B67|)) +(get-value (|B68|)) +(get-value (|B69|)) +(get-value (|B7|)) +(get-value (|B70|)) +(get-value (|B71|)) +(get-value (|B72|)) +(get-value (|B73|)) +(get-value (|B74|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$13!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$16!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-023/test.c b/regression/strings/Z3str2-bv/concat-023/test.c new file mode 100644 index 00000000000..e4e710d7720 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-023/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 0) + && (__CPROVER_string_length(y) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 new file mode 100644 index 00000000000..3ec2a51b2d3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 new file mode 100644 index 00000000000..000fe43ee4e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-024/test.c b/regression/strings/Z3str2-bv/concat-024/test.c new file mode 100644 index 00000000000..5bcc2c7b435 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-024/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 new file mode 100644 index 00000000000..7533db9ce02 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 @@ -0,0 +1,165 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.3)) + +; convert +(define-fun |B1| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 new file mode 100644 index 00000000000..2c6a5a9de83 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 @@ -0,0 +1,137 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-025/test.c b/regression/strings/Z3str2-bv/concat-025/test.c new file mode 100644 index 00000000000..e275b5a658d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-025/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + unsigned int i; + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == i) + && (__CPROVER_string_length(y) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 new file mode 100644 index 00000000000..cc3ebe266c2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 @@ -0,0 +1,244 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) + +; convert +(define-fun |B19| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 new file mode 100644 index 00000000000..ff53496d485 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 @@ -0,0 +1,220 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) + +; convert +(define-fun |B19| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-026/test.c b/regression/strings/Z3str2-bv/concat-026/test.c new file mode 100644 index 00000000000..a1818ea5c83 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-026/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) + && (__CPROVER_string_length(x) == 1) + && (__CPROVER_string_length(m) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 new file mode 100644 index 00000000000..a3929a6542f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 new file mode 100644 index 00000000000..155fad7d0ea --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::m!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-027/test.c b/regression/strings/Z3str2-bv/concat-027/test.c new file mode 100644 index 00000000000..0591685ce58 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-027/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 1) + && (__CPROVER_string_length(y) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 new file mode 100644 index 00000000000..83db9e2b8ee --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 new file mode 100644 index 00000000000..6680e77074f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-028/test.c b/regression/strings/Z3str2-bv/concat-028/test.c new file mode 100644 index 00000000000..9484a512b8a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-028/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 0) + && (__CPROVER_string_length(y) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 new file mode 100644 index 00000000000..a0f282d66f8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 new file mode 100644 index 00000000000..3a866ea35b7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-029/test.c b/regression/strings/Z3str2-bv/concat-029/test.c new file mode 100644 index 00000000000..d79f90a58fa --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-029/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) + && (__CPROVER_string_length(m) == 0) + && (__CPROVER_string_length(n) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 new file mode 100644 index 00000000000..f9357c3171a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 new file mode 100644 index 00000000000..94ec803652e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-030/test.c b/regression/strings/Z3str2-bv/concat-030/test.c new file mode 100644 index 00000000000..e9f7b4f3513 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-030/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) + && (__CPROVER_string_length(m) == 1) + && (__CPROVER_string_length(n) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 new file mode 100644 index 00000000000..9dae437e9a2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 new file mode 100644 index 00000000000..787a48321c1 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-031/test.c b/regression/strings/Z3str2-bv/concat-031/test.c new file mode 100644 index 00000000000..481c99bfe10 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-031/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) + && (__CPROVER_string_length(m) == 0) + && (__CPROVER_string_length(n) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 new file mode 100644 index 00000000000..0e5135ae3a9 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 @@ -0,0 +1,237 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 new file mode 100644 index 00000000000..662a1b5701b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 @@ -0,0 +1,213 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-032/test.c b/regression/strings/Z3str2-bv/concat-032/test.c new file mode 100644 index 00000000000..9647d70eb17 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-032/test.c @@ -0,0 +1,19 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m; + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) + && (__CPROVER_string_length(m) == 1) + && (__CPROVER_string_length(n) == 1) + && (__CPROVER_string_length(x) == 1) + && (__CPROVER_string_length(y) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 new file mode 100644 index 00000000000..f7854d914dd --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 @@ -0,0 +1,309 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#4| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3| |goto_symex::&92;guard#4|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#4| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B13| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; set_to true +(assert |goto_symex::&92;guard#4|) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|goto_symex::&92;guard#4|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 new file mode 100644 index 00000000000..b20de311c0d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 @@ -0,0 +1,289 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#4| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3| |goto_symex::&92;guard#4|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.2 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.2) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.3 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.3|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.3) + +; set_to true +(assert (= |goto_symex::&92;guard#4| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B13| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; set_to true +(assert |goto_symex::&92;guard#4|) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|goto_symex::&92;guard#4|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-033/test.c b/regression/strings/Z3str2-bv/concat-033/test.c new file mode 100644 index 00000000000..d77b1ea3532 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-033/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 new file mode 100644 index 00000000000..5145d6ac68a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 @@ -0,0 +1,174 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 new file mode 100644 index 00000000000..fb18bf2015d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 @@ -0,0 +1,142 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-034/test.c b/regression/strings/Z3str2-bv/concat-034/test.c new file mode 100644 index 00000000000..b8527f4fb4b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-034/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(x, __CPROVER_string_literal("b")), y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 new file mode 100644 index 00000000000..d00ecc61546 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 @@ -0,0 +1,209 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 new file mode 100644 index 00000000000..00659afb1de --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 @@ -0,0 +1,165 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::1::y!0@1#1|)) + +(define-fun string.2 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-035/test.c b/regression/strings/Z3str2-bv/concat-035/test.c new file mode 100644 index 00000000000..b45123c6033 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-035/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(z) == 0) + && (__CPROVER_string_length(x) == 2)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 new file mode 100644 index 00000000000..b327ae334c2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 new file mode 100644 index 00000000000..4657c2e1ad3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-036/test.c b/regression/strings/Z3str2-bv/concat-036/test.c new file mode 100644 index 00000000000..2cfd98f5acb --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-036/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(z) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 new file mode 100644 index 00000000000..9abe839e247 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 new file mode 100644 index 00000000000..368acd2c6f2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-037/test.c b/regression/strings/Z3str2-bv/concat-037/test.c new file mode 100644 index 00000000000..91200bf095a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-037/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(x) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 new file mode 100644 index 00000000000..114a02fb274 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 new file mode 100644 index 00000000000..c999d203e5d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-038/test.c b/regression/strings/Z3str2-bv/concat-038/test.c new file mode 100644 index 00000000000..cc5ca9a5b87 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-038/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(z) == 0) + && (__CPROVER_string_length(x) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 new file mode 100644 index 00000000000..2f2f5d17059 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 new file mode 100644 index 00000000000..202900ae2b6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-039/test.c b/regression/strings/Z3str2-bv/concat-039/test.c new file mode 100644 index 00000000000..11662be8152 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-039/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(z) == 0) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 new file mode 100644 index 00000000000..ddc08da0d32 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 new file mode 100644 index 00000000000..ba05301add2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-040/test.c b/regression/strings/Z3str2-bv/concat-040/test.c new file mode 100644 index 00000000000..7eff1f51ca4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-040/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(z) == 1) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 new file mode 100644 index 00000000000..8d7502942a8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 new file mode 100644 index 00000000000..e3009fcc0e7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-041/test.c b/regression/strings/Z3str2-bv/concat-041/test.c new file mode 100644 index 00000000000..f1aee262fca --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-041/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) + && (__CPROVER_string_length(y) == 1) + && (__CPROVER_string_length(x) == 3)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 new file mode 100644 index 00000000000..bf8e9fafe19 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 new file mode 100644 index 00000000000..ad148adb0e4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-042/test.c b/regression/strings/Z3str2-bv/concat-042/test.c new file mode 100644 index 00000000000..b3584747a24 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-042/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string v1; + __CPROVER_string v2; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(v1, v2), __CPROVER_string_literal("e")), __CPROVER_string_concat(x, y))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 new file mode 100644 index 00000000000..d82032c6eab --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 @@ -0,0 +1,200 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::v1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::v2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::v1!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::v2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.2) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::v1!0@1#1| |main::1::v1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::v2!0@1#1| |main::1::v2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::v1!0@1#1|)) +(get-value (|main::1::v2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 new file mode 100644 index 00000000000..e93ca493591 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 @@ -0,0 +1,160 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::v1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::v2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::v1!0@1#1| |main::1::v2!0@1#1|)) + +(define-fun string.1 () cprover.String "e") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::v1!0@1#1| |main::1::v1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::v2!0@1#1| |main::1::v2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::v1!0@1#1|)) +(get-value (|main::1::v2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-043/test.c b/regression/strings/Z3str2-bv/concat-043/test.c new file mode 100644 index 00000000000..ec2e4c157f5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-043/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 new file mode 100644 index 00000000000..00a210d64ab --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 @@ -0,0 +1,174 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 new file mode 100644 index 00000000000..a415ea39ff4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 @@ -0,0 +1,142 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-044/test.c b/regression/strings/Z3str2-bv/concat-044/test.c new file mode 100644 index 00000000000..0813b914a72 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-044/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) + && (__CPROVER_string_length(x) == 6)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 new file mode 100644 index 00000000000..277f7effae7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 new file mode 100644 index 00000000000..c57203699c2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-045/test.c b/regression/strings/Z3str2-bv/concat-045/test.c new file mode 100644 index 00000000000..3eed40b5c67 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-045/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y2; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)), __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2)) + && (__CPROVER_string_length(x1) == 4)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 new file mode 100644 index 00000000000..0e286e13838 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.6)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 new file mode 100644 index 00000000000..4f3f5d1248c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 @@ -0,0 +1,203 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +(define-fun string.2 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x2!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-046/test.c b/regression/strings/Z3str2-bv/concat-046/test.c new file mode 100644 index 00000000000..a4390b6cb11 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-046/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) + && (__CPROVER_string_length(x) == 2) + && (__CPROVER_string_length(z) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 new file mode 100644 index 00000000000..584b31729f5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 new file mode 100644 index 00000000000..26610885257 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c b/regression/strings/Z3str2-bv/concat-047-unsat/test.c new file mode 100644 index 00000000000..610f0dbc59a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-047-unsat/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) + && (__CPROVER_string_length(x) == 2) + && (__CPROVER_string_length(y) == 4) + && (__CPROVER_string_length(z) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..c31ebade389 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 @@ -0,0 +1,282 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..6c1f32f1071 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 @@ -0,0 +1,256 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +(declare-fun string_length.2 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.2) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-048/test.c b/regression/strings/Z3str2-bv/concat-048/test.c new file mode 100644 index 00000000000..25eaacb7c74 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-048/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) + && (__CPROVER_string_length(x) == 3) + && (__CPROVER_string_length(z) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 new file mode 100644 index 00000000000..9cde138fc57 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 @@ -0,0 +1,246 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 new file mode 100644 index 00000000000..6b753a62647 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 @@ -0,0 +1,218 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-049/test.c b/regression/strings/Z3str2-bv/concat-049/test.c new file mode 100644 index 00000000000..1240be390cb --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-049/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) + && (__CPROVER_string_length(x) == 1) + && (__CPROVER_string_length(y) == 3) + && (__CPROVER_string_length(z) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 new file mode 100644 index 00000000000..49ce17544e0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 @@ -0,0 +1,282 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 new file mode 100644 index 00000000000..e92b921ad64 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 @@ -0,0 +1,256 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#3| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::z!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +(declare-fun string_length.2 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.2) + +; set_to true +(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; set_to true +(assert |goto_symex::&92;guard#3|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|goto_symex::&92;guard#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-050/test.c b/regression/strings/Z3str2-bv/concat-050/test.c new file mode 100644 index 00000000000..091e5b736e5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-050/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abcefg"), y))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 new file mode 100644 index 00000000000..632c2539de3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 @@ -0,0 +1,193 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv103 8))) +(assert (= (cprover.str.len string.3) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 new file mode 100644 index 00000000000..3b768a6e314 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "abcefg") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-051/test.c b/regression/strings/Z3str2-bv/concat-051/test.c new file mode 100644 index 00000000000..4d0eb1b5aca --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-051/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abcefg"), y)) + && (__CPROVER_string_length(y) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 new file mode 100644 index 00000000000..debac6a1548 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 @@ -0,0 +1,229 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv103 8))) +(assert (= (cprover.str.len string.3) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 new file mode 100644 index 00000000000..ccba0deb9e4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 @@ -0,0 +1,192 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "abcefg") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-052/test.c b/regression/strings/Z3str2-bv/concat-052/test.c new file mode 100644 index 00000000000..435371d8570 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-052/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y)) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 new file mode 100644 index 00000000000..dc07d8c85ab --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 @@ -0,0 +1,221 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 new file mode 100644 index 00000000000..dc05bd01015 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 @@ -0,0 +1,191 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-053/test.c b/regression/strings/Z3str2-bv/concat-053/test.c new file mode 100644 index 00000000000..7b6281872ca --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-053/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abcefgh"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y)) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 new file mode 100644 index 00000000000..cb3e36ca555 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 @@ -0,0 +1,230 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv104 8))) +(assert (= (cprover.str.len string.1) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 new file mode 100644 index 00000000000..cc8a3c13969 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 @@ -0,0 +1,192 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abcefgh") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c b/regression/strings/Z3str2-bv/concat-054-unsat/test.c new file mode 100644 index 00000000000..8e25e2c9ac8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-054-unsat/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abkefgh"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..4735ec5fffe --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 @@ -0,0 +1,194 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv107 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv104 8))) +(assert (= (cprover.str.len string.1) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..743598dd4bc --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abkefgh") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-055/test.c b/regression/strings/Z3str2-bv/concat-055/test.c new file mode 100644 index 00000000000..1f763acfbff --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-055/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 new file mode 100644 index 00000000000..8b2642c02e1 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 @@ -0,0 +1,197 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.3) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 new file mode 100644 index 00000000000..c904ea5dcdb --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abefef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "efefghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-056/test.c b/regression/strings/Z3str2-bv/concat-056/test.c new file mode 100644 index 00000000000..670572f9747 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-056/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi"))) + && (__CPROVER_string_length(y) == 4)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 new file mode 100644 index 00000000000..9933d1fdd6a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 @@ -0,0 +1,233 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.3) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 new file mode 100644 index 00000000000..312d3a5e5df --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 @@ -0,0 +1,192 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abefef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "efefghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-057/test.c b/regression/strings/Z3str2-bv/concat-057/test.c new file mode 100644 index 00000000000..5da9d7e82dc --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-057/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi"))) + && (__CPROVER_string_length(y) == 2)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 new file mode 100644 index 00000000000..2fe2bfcb0f6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 @@ -0,0 +1,233 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv6 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.3) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 new file mode 100644 index 00000000000..10458766c56 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 @@ -0,0 +1,192 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abefef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "efefghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-058/test.c b/regression/strings/Z3str2-bv/concat-058/test.c new file mode 100644 index 00000000000..81f9df3cb2b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-058/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("ab"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("k_ghi")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 new file mode 100644 index 00000000000..7ffff75313f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 @@ -0,0 +1,191 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv107 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv103 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.3) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 new file mode 100644 index 00000000000..6963c09281c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) + +(define-fun string.2 () cprover.String "k_ghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c b/regression/strings/Z3str2-bv/concat-059-unsat/test.c new file mode 100644 index 00000000000..d27ba3c7db6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-059-unsat/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("ab")), __CPROVER_string_concat(y, __CPROVER_string_literal("k_ghi")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..ec90fb96c6e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 @@ -0,0 +1,191 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv107 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv103 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv104 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.3) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..2d79959a3e6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "k_ghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-060/test.c b/regression/strings/Z3str2-bv/concat-060/test.c new file mode 100644 index 00000000000..e473967cca5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-060/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("ab")), __CPROVER_string_concat(y, __CPROVER_string_literal("iab")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 new file mode 100644 index 00000000000..855f7005a74 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 @@ -0,0 +1,189 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv105 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.3) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 new file mode 100644 index 00000000000..f147f851b3a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "iab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-061/test.c b/regression/strings/Z3str2-bv/concat-061/test.c new file mode 100644 index 00000000000..75fd520aedd --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-061/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("k_ghiab")), __CPROVER_string_concat(y, __CPROVER_string_literal("ab")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 new file mode 100644 index 00000000000..b44af6b5c1f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 @@ -0,0 +1,193 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv107 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv95 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv105 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv7 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.3) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 new file mode 100644 index 00000000000..1b54cb79509 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 @@ -0,0 +1,154 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "k_ghiab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-062/test.c b/regression/strings/Z3str2-bv/concat-062/test.c new file mode 100644 index 00000000000..bfa46e11e5e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-062/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, Y), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 new file mode 100644 index 00000000000..f260a6e1ddc --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 @@ -0,0 +1,200 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::Y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 new file mode 100644 index 00000000000..7d169aac28c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 @@ -0,0 +1,160 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) + +(define-fun string.1 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-063/test.c b/regression/strings/Z3str2-bv/concat-063/test.c new file mode 100644 index 00000000000..c93b712520e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-063/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, Y), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) + && ((int)__CPROVER_string_length(X)) > ((int)0) + && ((int)__CPROVER_string_length(Y)) > ((int)1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 new file mode 100644 index 00000000000..29c01dec9c2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 @@ -0,0 +1,272 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::Y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.2) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::Y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B19| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B20| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 new file mode 100644 index 00000000000..7cf381e83db --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 @@ -0,0 +1,236 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) + +(define-fun string.1 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::Y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B19| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B20| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-064/test.c b/regression/strings/Z3str2-bv/concat-064/test.c new file mode 100644 index 00000000000..f22a0ac4008 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-064/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b"))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 new file mode 100644 index 00000000000..b6694d014ba --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 @@ -0,0 +1,235 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::Y!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 new file mode 100644 index 00000000000..4ade173ed76 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-065/test.c b/regression/strings/Z3str2-bv/concat-065/test.c new file mode 100644 index 00000000000..df470bffaa9 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-065/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b"))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) + && (__CPROVER_string_length(X) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 new file mode 100644 index 00000000000..0bf15d98f72 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 @@ -0,0 +1,271 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::Y!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.7)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 new file mode 100644 index 00000000000..812fbe6da2d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 @@ -0,0 +1,221 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-066/test.c b/regression/strings/Z3str2-bv/concat-066/test.c new file mode 100644 index 00000000000..18836a75b5d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-066/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("a"), __CPROVER_string_concat(X, Y)), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 new file mode 100644 index 00000000000..f418493ae4e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 @@ -0,0 +1,235 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 new file mode 100644 index 00000000000..21c3e645f6a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c b/regression/strings/Z3str2-bv/concat-067-unsat/test.c new file mode 100644 index 00000000000..a18cfc4df64 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-067-unsat/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_literal("a")), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) + && (__CPROVER_string_length(X) == 0)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..e985fe90b78 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 @@ -0,0 +1,250 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.3) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.6)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B16| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..cd468420ad3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B16| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-068/test.c b/regression/strings/Z3str2-bv/concat-068/test.c new file mode 100644 index 00000000000..9c51d4e84e3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-068/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("a"), x)) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y, __CPROVER_string_literal("c"))) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 new file mode 100644 index 00000000000..0f8fd3c208d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 @@ -0,0 +1,280 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.6)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B11| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 new file mode 100644 index 00000000000..6e3a8c6ac9a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 @@ -0,0 +1,240 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B11| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-069/test.c b/regression/strings/Z3str2-bv/concat-069/test.c new file mode 100644 index 00000000000..8d79eb5b6b1 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-069/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(__CPROVER_string_literal("a"), Y)), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 new file mode 100644 index 00000000000..c214a30afc0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 @@ -0,0 +1,235 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 new file mode 100644 index 00000000000..49107ede998 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +(define-fun string.2 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-070/test.c b/regression/strings/Z3str2-bv/concat-070/test.c new file mode 100644 index 00000000000..c641be260c0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-070/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string I; + __CPROVER_string J; + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("a"), __CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b")))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 new file mode 100644 index 00000000000..3a2a91a7c53 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 @@ -0,0 +1,270 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.2) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::Y!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +(declare-fun string.6 () cprover.String) +(assert (= (select string.6 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.6) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.6) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.7 () cprover.String |main::1::J!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.8 () cprover.String) +(define-fun string_concat.s0.8 () cprover.String |main::1::I!0@1#1|) +(define-fun string_concat.s1.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) +(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.8) + +; string equal +(declare-fun string_equal.9 () Bool) +(define-fun string_equal.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.9 () cprover.Pos) +(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) +(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) +(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.9)) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 new file mode 100644 index 00000000000..a175404fda6 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 @@ -0,0 +1,206 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +(define-fun string.2 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) + +(define-fun string.3 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::J!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::J!0@1#1|)) + +; find_symbols +(declare-fun |main::1::I!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::I!0@1#1|)) +(get-value (|main::1::J!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-071/test.c b/regression/strings/Z3str2-bv/concat-071/test.c new file mode 100644 index 00000000000..715e4ee4a08 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-071/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2)), __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 new file mode 100644 index 00000000000..eb77b0e4157 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 @@ -0,0 +1,238 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.4) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) + +; convert +(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 new file mode 100644 index 00000000000..4c613db4496 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B4| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-072/test.c b/regression/strings/Z3str2-bv/concat-072/test.c new file mode 100644 index 00000000000..41a7eee798d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-072/test.c @@ -0,0 +1,19 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 new file mode 100644 index 00000000000..6592d1cf5d2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 @@ -0,0 +1,325 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.8)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 new file mode 100644 index 00000000000..0cb3c221a51 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 @@ -0,0 +1,260 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-073/test.c b/regression/strings/Z3str2-bv/concat-073/test.c new file mode 100644 index 00000000000..487f42198ff --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-073/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string M; + __CPROVER_string X; + __CPROVER_string Y1; + __CPROVER_string Y2; + __CPROVER_string Z; + + if (__CPROVER_string_equal(Z, __CPROVER_string_concat(X, __CPROVER_string_literal("gkhi"))) + && __CPROVER_string_equal(Z, __CPROVER_string_concat(Y1, Y2)) + && __CPROVER_string_equal(Z, __CPROVER_string_concat(__CPROVER_string_literal("abcd"), M))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 new file mode 100644 index 00000000000..ce3ad855e0c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 @@ -0,0 +1,335 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv107 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::Z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::Z!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) + +; find_symbols +(declare-fun |main::1::Y1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::Y1!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::Y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::Z!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +(declare-fun string.6 () cprover.String) +(assert (= (select string.6 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.6 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.6 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.6 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.6) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.6) + +; find_symbols +(declare-fun |main::1::M!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.7 () cprover.String |main::1::M!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::Z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.8)) + +; convert +(define-fun |B13| () Bool (= |main::1::M!0@1#1| |main::1::M!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::Z!0@1#1| |main::1::Z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::M!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y1!0@1#1|)) +(get-value (|main::1::Y2!0@1#1|)) +(get-value (|main::1::Z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 new file mode 100644 index 00000000000..d67ca626c22 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 @@ -0,0 +1,267 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "gkhi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) + +; find_symbols +(declare-fun |main::1::Z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +; find_symbols +(declare-fun |main::1::Y1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::Y1!0@1#1| |main::1::Y2!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(define-fun string.2 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::M!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::M!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) + +; convert +(define-fun |B13| () Bool (= |main::1::M!0@1#1| |main::1::M!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::Z!0@1#1| |main::1::Z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::M!0@1#1|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y1!0@1#1|)) +(get-value (|main::1::Y2!0@1#1|)) +(get-value (|main::1::Z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-074/test.c b/regression/strings/Z3str2-bv/concat-074/test.c new file mode 100644 index 00000000000..5899762af72 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-074/test.c @@ -0,0 +1,22 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string k; + __CPROVER_string m; + __CPROVER_string n1; + __CPROVER_string n2; + __CPROVER_string x; + __CPROVER_string y; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, __CPROVER_string_literal("gkhi"))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y, __CPROVER_string_literal("hi"))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("abcd"), m)) + && __CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("ab"), k)) + && __CPROVER_string_equal(z, __CPROVER_string_concat(n1, n2))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 new file mode 100644 index 00000000000..3f7928dfec4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 @@ -0,0 +1,537 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv107 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv104 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv104 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.4) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| string_equal.6)) + +(declare-fun string.7 () cprover.String) +(assert (= (select string.7 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.7 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.7 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.7) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.7) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.8 () cprover.String) +(define-fun string_concat.s0.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.8 () cprover.String |main::1::m!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) +(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.8) + +; string equal +(declare-fun string_equal.9 () Bool) +(define-fun string_equal.s1.9 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.9 () cprover.Pos) +(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) +(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) +(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.9)) + +(declare-fun string.10 () cprover.String) +(assert (= (select string.10 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.10 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.10) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.10) + +; find_symbols +(declare-fun |main::1::k!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.11 () cprover.String |main::1::k!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.13 () cprover.String) +(define-fun string_concat.s0.13 () cprover.String |main::1::n1!0@1#1|) +(define-fun string_concat.s1.13 () cprover.String |main::1::n2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.13)) (= (select string_concat.s0.13 ?n) (select string_concat.13 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.13)) (= (select string_concat.s1.13 ?n) (select string_concat.13 (bvadd (cprover.str.len string_concat.s0.13) ?n)))))) +(assert (= (cprover.str.len string_concat.13) (bvadd (cprover.str.len string_concat.s0.13) (cprover.str.len string_concat.s1.13)))) +(assert (bvuge (cprover.str.len string_concat.13) (cprover.str.len string_concat.s0.13))) +(assert (bvuge (cprover.str.len string_concat.13) (cprover.str.len string_concat.s1.13))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.13) + +; string equal +(declare-fun string_equal.14 () Bool) +(define-fun string_equal.s1.14 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(declare-fun string_equal.idx.14 () cprover.Pos) +(assert (=> string_equal.14 (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.14 (bvult ?n (cprover.str.len string_equal.s1.14))) (= (select string_equal.s1.14 ?n) (select string_equal.s2.14 ?n))))) +(assert (=> (not string_equal.14) (or (not (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14))) +(and (bvult string_equal.idx.14 (cprover.str.len string_equal.s1.14)) (not (= (select string_equal.s1.14 string_equal.idx.14) (select string_equal.s2.14 string_equal.idx.14))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.14)) + +; convert +(define-fun |B27| () Bool (= |main::1::k!0@1#1| |main::1::k!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B32| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B33| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| () Bool) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B48| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) + +; convert +(define-fun |B49| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B50| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B51| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B52| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::k!0@1#1|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 new file mode 100644 index 00000000000..483cc701862 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 @@ -0,0 +1,423 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "gkhi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|))) + +(define-fun string.2 () cprover.String "hi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|))) + +(define-fun string.3 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::m!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(define-fun string.4 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::k!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::k!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::n1!0@1#1| |main::1::n2!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|))) + +; convert +(define-fun |B27| () Bool (= |main::1::k!0@1#1| |main::1::k!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B32| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; convert +(define-fun |B33| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| () Bool) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B48| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) + +; convert +(define-fun |B49| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) + +; convert +(define-fun |B50| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B51| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B52| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::k!0@1#1|)) +(get-value (|main::1::m!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-075/test.c b/regression/strings/Z3str2-bv/concat-075/test.c new file mode 100644 index 00000000000..ffb6c37577f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-075/test.c @@ -0,0 +1,17 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string x3; + __CPROVER_string y2; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("ef"), y2), __CPROVER_string_concat(x1, x2)) + && __CPROVER_string_equal(__CPROVER_string_concat(x3, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)), __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 new file mode 100644 index 00000000000..c2726d95996 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 @@ -0,0 +1,358 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B9| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B10| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B11| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B12| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::x3!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::x3!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.7) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; string concatenation +(declare-fun string_concat.8 () cprover.String) +(define-fun string_concat.s0.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.8 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) +(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) +(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.8) + +; string equal +(declare-fun string_equal.9 () Bool) +(define-fun string_equal.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.9 () cprover.Pos) +(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) +(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) +(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.9)) + +; convert +(define-fun |B14| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) + +; convert +(define-fun |B18| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B30| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x3!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 new file mode 100644 index 00000000000..db7460483a3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 @@ -0,0 +1,284 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B9| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B10| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B11| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B12| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::1::x2!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|))) + +(define-fun string.2 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x3!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y2!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; convert +(define-fun |B14| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) + +; convert +(define-fun |B18| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B30| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x3!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c b/regression/strings/Z3str2-bv/concat-076-unsat/test.c new file mode 100644 index 00000000000..b88cf3ec2ea --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-076-unsat/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 4)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 new file mode 100644 index 00000000000..0787bb5efed --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 new file mode 100644 index 00000000000..4746f5b149e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-077/test.c b/regression/strings/Z3str2-bv/concat-077/test.c new file mode 100644 index 00000000000..288c6dec4af --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-077/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 5)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 new file mode 100644 index 00000000000..41d5454ab53 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 new file mode 100644 index 00000000000..9767c660775 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-078/test.c b/regression/strings/Z3str2-bv/concat-078/test.c new file mode 100644 index 00000000000..29195bd90c3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-078/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 6)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 new file mode 100644 index 00000000000..a17a9867ea2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 new file mode 100644 index 00000000000..fe0336210c2 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-079/test.c b/regression/strings/Z3str2-bv/concat-079/test.c new file mode 100644 index 00000000000..a1a50de2b61 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-079/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 7)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 new file mode 100644 index 00000000000..75f67b19bae --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 new file mode 100644 index 00000000000..e510339c500 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-080/test.c b/regression/strings/Z3str2-bv/concat-080/test.c new file mode 100644 index 00000000000..0977e1cc61f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-080/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 8)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 new file mode 100644 index 00000000000..901efa3c41f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 new file mode 100644 index 00000000000..f04b52c7a7e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-081/test.c b/regression/strings/Z3str2-bv/concat-081/test.c new file mode 100644 index 00000000000..cedd9cf993a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-081/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 9)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 new file mode 100644 index 00000000000..e163be48938 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 new file mode 100644 index 00000000000..a78a677863c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-082/test.c b/regression/strings/Z3str2-bv/concat-082/test.c new file mode 100644 index 00000000000..6a3a32dcd08 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-082/test.c @@ -0,0 +1,21 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && (__CPROVER_string_length(z) == 16)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 new file mode 100644 index 00000000000..55290515457 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 @@ -0,0 +1,484 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 new file mode 100644 index 00000000000..c802cb01c0f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 @@ -0,0 +1,388 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-083/test.c b/regression/strings/Z3str2-bv/concat-083/test.c new file mode 100644 index 00000000000..692f58d72c5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-083/test.c @@ -0,0 +1,23 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string n1; + __CPROVER_string n2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && ((int)__CPROVER_string_length(z)) < ((int)9)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 new file mode 100644 index 00000000000..122bf078726 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 @@ -0,0 +1,498 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B47| () Bool (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 new file mode 100644 index 00000000000..31ee23a9222 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 @@ -0,0 +1,402 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B28| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B47| () Bool (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-084/test.c b/regression/strings/Z3str2-bv/concat-084/test.c new file mode 100644 index 00000000000..aac2785682b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-084/test.c @@ -0,0 +1,24 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string n1; + __CPROVER_string n2; + __CPROVER_string x1; + __CPROVER_string x2; + unsigned int x2Len; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && ((int)__CPROVER_string_length(z)) > ((int)7)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 new file mode 100644 index 00000000000..3edaa486535 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 @@ -0,0 +1,505 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x2Len!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B28| () Bool (= |main::1::x2Len!0@1#1| |main::1::x2Len!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B47| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B48| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x2Len!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 new file mode 100644 index 00000000000..e6202a61498 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 @@ -0,0 +1,409 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +; convert +(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; convert +(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x2Len!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B28| () Bool (= |main::1::x2Len!0@1#1| |main::1::x2Len!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) + +; convert +(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) + +; convert +(define-fun |B47| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B48| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x2Len!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-085/test.c b/regression/strings/Z3str2-bv/concat-085/test.c new file mode 100644 index 00000000000..07db0ca70cd --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-085/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m2; + __CPROVER_string t_str2; + __CPROVER_string t_str5; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)) + && __CPROVER_string_equal(z, __CPROVER_string_concat(t_str5, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(t_str2, __CPROVER_string_literal("abc@")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 new file mode 100644 index 00000000000..f76cb03fb41 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 @@ -0,0 +1,385 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.4) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::t_str5!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::t_str5!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) + +(declare-fun string.8 () cprover.String) +(assert (= (select string.8 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.8 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.8 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.8 (_ bv3 32)) (_ bv64 8))) +(assert (= (cprover.str.len string.8) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.8) + +; find_symbols +(declare-fun |main::1::t_str2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.9 () cprover.String) +(define-fun string_concat.s0.9 () cprover.String |main::1::t_str2!0@1#1|) +(define-fun string_concat.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.9)) (= (select string_concat.s0.9 ?n) (select string_concat.9 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.9)) (= (select string_concat.s1.9 ?n) (select string_concat.9 (bvadd (cprover.str.len string_concat.s0.9) ?n)))))) +(assert (= (cprover.str.len string_concat.9) (bvadd (cprover.str.len string_concat.s0.9) (cprover.str.len string_concat.s1.9)))) +(assert (bvuge (cprover.str.len string_concat.9) (cprover.str.len string_concat.s0.9))) +(assert (bvuge (cprover.str.len string_concat.9) (cprover.str.len string_concat.s1.9))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.9) + +; string equal +(declare-fun string_equal.10 () Bool) +(define-fun string_equal.s1.10 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(declare-fun string_equal.idx.10 () cprover.Pos) +(assert (=> string_equal.10 (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.10 (bvult ?n (cprover.str.len string_equal.s1.10))) (= (select string_equal.s1.10 ?n) (select string_equal.s2.10 ?n))))) +(assert (=> (not string_equal.10) (or (not (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10))) +(and (bvult string_equal.idx.10 (cprover.str.len string_equal.s1.10)) (not (= (select string_equal.s1.10 string_equal.idx.10) (select string_equal.s2.10 string_equal.idx.10))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.10)) + +; convert +(define-fun |B17| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B18| () Bool (= |main::1::t_str2!0@1#1| |main::1::t_str2!0@1#1|)) + +; convert +(define-fun |B19| () Bool (= |main::1::t_str5!0@1#1| |main::1::t_str5!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B32| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B33| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B34| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::t_str2!0@1#1|)) +(get-value (|main::1::t_str5!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 new file mode 100644 index 00000000000..7a3eaadb05f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 @@ -0,0 +1,306 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|))) + +(define-fun string.2 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::t_str5!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::t_str5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(define-fun string.3 () cprover.String "abc@") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::t_str2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::t_str2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) + +; convert +(define-fun |B17| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B18| () Bool (= |main::1::t_str2!0@1#1| |main::1::t_str2!0@1#1|)) + +; convert +(define-fun |B19| () Bool (= |main::1::t_str5!0@1#1| |main::1::t_str5!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B32| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) + +; convert +(define-fun |B33| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B34| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::t_str2!0@1#1|)) +(get-value (|main::1::t_str5!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-086/test.c b/regression/strings/Z3str2-bv/concat-086/test.c new file mode 100644 index 00000000000..81ec32665f8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-086/test.c @@ -0,0 +1,23 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string n1; + __CPROVER_string n2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(n1, __CPROVER_string_concat(__CPROVER_string_literal("ghi"), n2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 new file mode 100644 index 00000000000..adb1926b5ad --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 @@ -0,0 +1,586 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.12)) + +(declare-fun string.13 () cprover.String) +(assert (= (select string.13 (_ bv0 32)) (_ bv103 8))) +(assert (= (select string.13 (_ bv1 32)) (_ bv104 8))) +(assert (= (select string.13 (_ bv2 32)) (_ bv105 8))) +(assert (= (cprover.str.len string.13) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.13) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.14 () cprover.String) +(define-fun string_concat.s0.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.14 () cprover.String |main::1::n2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.14)) (= (select string_concat.s0.14 ?n) (select string_concat.14 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.14)) (= (select string_concat.s1.14 ?n) (select string_concat.14 (bvadd (cprover.str.len string_concat.s0.14) ?n)))))) +(assert (= (cprover.str.len string_concat.14) (bvadd (cprover.str.len string_concat.s0.14) (cprover.str.len string_concat.s1.14)))) +(assert (bvuge (cprover.str.len string_concat.14) (cprover.str.len string_concat.s0.14))) +(assert (bvuge (cprover.str.len string_concat.14) (cprover.str.len string_concat.s1.14))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.14) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.15 () cprover.String) +(define-fun string_concat.s0.15 () cprover.String |main::1::n1!0@1#1|) +(define-fun string_concat.s1.15 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.15)) (= (select string_concat.s0.15 ?n) (select string_concat.15 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.15)) (= (select string_concat.s1.15 ?n) (select string_concat.15 (bvadd (cprover.str.len string_concat.s0.15) ?n)))))) +(assert (= (cprover.str.len string_concat.15) (bvadd (cprover.str.len string_concat.s0.15) (cprover.str.len string_concat.s1.15)))) +(assert (bvuge (cprover.str.len string_concat.15) (cprover.str.len string_concat.s0.15))) +(assert (bvuge (cprover.str.len string_concat.15) (cprover.str.len string_concat.s1.15))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.15) + +; string equal +(declare-fun string_equal.16 () Bool) +(define-fun string_equal.s1.16 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.16 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.16 () cprover.Pos) +(assert (=> string_equal.16 (= (cprover.str.len string_equal.s1.16) (cprover.str.len string_equal.s2.16)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.16 (bvult ?n (cprover.str.len string_equal.s1.16))) (= (select string_equal.s1.16 ?n) (select string_equal.s2.16 ?n))))) +(assert (=> (not string_equal.16) (or (not (= (cprover.str.len string_equal.s1.16) (cprover.str.len string_equal.s2.16))) +(and (bvult string_equal.idx.16 (cprover.str.len string_equal.s1.16)) (not (= (select string_equal.s1.16 string_equal.idx.16) (select string_equal.s2.16 string_equal.idx.16))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.16)) + +; convert +(define-fun |B28| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B32| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B33| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B34| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B35| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B36| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B48| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B49| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B53| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) + +; convert +(define-fun |B54| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B55| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B56| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B53|)) +(get-value (|B54|)) +(get-value (|B55|)) +(get-value (|B56|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 new file mode 100644 index 00000000000..63b8d905a49 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 @@ -0,0 +1,454 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(define-fun string.4 () cprover.String "ghi") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) + +; find_symbols +(declare-fun |main::1::n2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::n2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::n1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::n1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; convert +(define-fun |B28| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B29| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B30| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) + +; convert +(define-fun |B31| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) + +; convert +(define-fun |B32| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B33| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B34| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B35| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B36| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| () cprover.String) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| () cprover.String) +; convert +(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| () cprover.String) +; convert +(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| () Bool) +; convert +(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B48| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B49| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B53| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) + +; convert +(define-fun |B54| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B55| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B56| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B41|)) +(get-value (|B42|)) +(get-value (|B43|)) +(get-value (|B44|)) +(get-value (|B45|)) +(get-value (|B46|)) +(get-value (|B47|)) +(get-value (|B48|)) +(get-value (|B49|)) +(get-value (|B5|)) +(get-value (|B50|)) +(get-value (|B51|)) +(get-value (|B52|)) +(get-value (|B53|)) +(get-value (|B54|)) +(get-value (|B55|)) +(get-value (|B56|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::n1!0@1#1|)) +(get-value (|main::1::n2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-087/test.c b/regression/strings/Z3str2-bv/concat-087/test.c new file mode 100644 index 00000000000..115d884bd05 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-087/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string X; + __CPROVER_string Y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(__CPROVER_string_literal("ab"), Y)), __CPROVER_string_concat(Y, __CPROVER_string_concat(__CPROVER_string_literal("ba"), X))) + && (2 == __CPROVER_string_length(X))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 new file mode 100644 index 00000000000..34224e71918 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 @@ -0,0 +1,259 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv98 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.4) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) + +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::1::X!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) + +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::Y!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) + +; string equal +(declare-fun string_equal.7 () Bool) +(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.7 () cprover.Pos) +(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) +(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) +(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.7)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 new file mode 100644 index 00000000000..7f660ff9ac8 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 @@ -0,0 +1,207 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "ab") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::Y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) + +(define-fun string.2 () cprover.String "ba") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::X!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::Y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-088/test.c b/regression/strings/Z3str2-bv/concat-088/test.c new file mode 100644 index 00000000000..738115a0ff0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-088/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string X; + __CPROVER_string ts0; + __CPROVER_string ts1; + __CPROVER_string ts2; + + if (__CPROVER_string_equal(X, __CPROVER_string_concat(ts0, __CPROVER_string_concat(__CPROVER_string_literal("abc"), ts2))) + && __CPROVER_string_equal(X, __CPROVER_string_literal("abc"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 new file mode 100644 index 00000000000..119fdb48b52 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 @@ -0,0 +1,242 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::ts2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::ts2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::ts0!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::ts0!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::X!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::X!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::ts0!0@1#1| |main::1::ts0!0@1#1|)) + +; find_symbols +(declare-fun |main::1::ts1!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::ts1!0@1#1| |main::1::ts1!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::ts2!0@1#1| |main::1::ts2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::ts0!0@1#1|)) +(get-value (|main::1::ts1!0@1#1|)) +(get-value (|main::1::ts2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 new file mode 100644 index 00000000000..62711756758 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 @@ -0,0 +1,200 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::ts2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::ts2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::ts0!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::ts0!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) + +; find_symbols +(declare-fun |main::1::X!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::ts0!0@1#1| |main::1::ts0!0@1#1|)) + +; find_symbols +(declare-fun |main::1::ts1!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::ts1!0@1#1| |main::1::ts1!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::ts2!0@1#1| |main::1::ts2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::X!0@1#1|)) +(get-value (|main::1::ts0!0@1#1|)) +(get-value (|main::1::ts1!0@1#1|)) +(get-value (|main::1::ts2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-089/test.c b/regression/strings/Z3str2-bv/concat-089/test.c new file mode 100644 index 00000000000..9402c00136a --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-089/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string Y3; + __CPROVER_string Y4; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("abc")), __CPROVER_string_concat(__CPROVER_string_literal("ef"), y)) + && __CPROVER_string_equal(__CPROVER_string_concat(y, Y3), __CPROVER_string_concat(Y4, x))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 new file mode 100644 index 00000000000..26f80d0129b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 @@ -0,0 +1,296 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.3) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.5)) + +; find_symbols +(declare-fun |main::1::Y3!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.6 () cprover.String |main::1::Y3!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::Y4!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::Y4!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.8)) + +; convert +(define-fun |B8| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::Y3!0@1#1|)) +(get-value (|main::1::Y4!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 new file mode 100644 index 00000000000..1340c262ff3 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 @@ -0,0 +1,231 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +; find_symbols +(declare-fun |main::1::Y3!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::Y3!0@1#1|)) + +; find_symbols +(declare-fun |main::1::Y4!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y4!0@1#1| |main::1::x!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) + +; convert +(define-fun |B8| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) +(get-value (|main::1::Y3!0@1#1|)) +(get-value (|main::1::Y4!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-090/test.c b/regression/strings/Z3str2-bv/concat-090/test.c new file mode 100644 index 00000000000..0b047e5d75e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-090/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string Y1; + __CPROVER_string Y2; + __CPROVER_string Y3; + __CPROVER_string Y4; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, Y1), __CPROVER_string_concat(Y2, y)) + && __CPROVER_string_equal(__CPROVER_string_concat(y, Y3), __CPROVER_string_concat(Y4, x))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 new file mode 100644 index 00000000000..67940346d33 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 @@ -0,0 +1,279 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::Y1!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::Y2!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::Y2!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.3)) + +; find_symbols +(declare-fun |main::1::Y3!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::Y3!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.4) + +; find_symbols +(declare-fun |main::1::Y4!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::1::Y4!0@1#1|) +(define-fun string_concat.s1.5 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.5) + +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.6)) + +; convert +(define-fun |B8| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::1::Y1!0@1#1|)) +(get-value (|main::1::Y2!0@1#1|)) +(get-value (|main::1::Y3!0@1#1|)) +(get-value (|main::1::Y4!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 new file mode 100644 index 00000000000..24c0bd02559 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 @@ -0,0 +1,221 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::Y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::Y1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::Y2!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::Y2!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; find_symbols +(declare-fun |main::1::Y3!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::Y3!0@1#1|)) + +; find_symbols +(declare-fun |main::1::Y4!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y4!0@1#1| |main::1::x!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) + +; convert +(define-fun |B8| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) + +; convert +(define-fun |B9| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) + +; convert +(define-fun |B10| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) + +; convert +(define-fun |B11| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) + +; convert +(define-fun |B12| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) + +; convert +(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; convert +(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::1::Y1!0@1#1|)) +(get-value (|main::1::Y2!0@1#1|)) +(get-value (|main::1::Y3!0@1#1|)) +(get-value (|main::1::Y4!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-091/test.c b/regression/strings/Z3str2-bv/concat-091/test.c new file mode 100644 index 00000000000..d07e5dabcfe --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-091/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("b")), __CPROVER_string_concat(__CPROVER_string_literal("a"), x))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 new file mode 100644 index 00000000000..77c1ac33177 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 @@ -0,0 +1,172 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.3) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::x!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 new file mode 100644 index 00000000000..fa275fb8142 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 @@ -0,0 +1,140 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::x!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-092/test.c b/regression/strings/Z3str2-bv/concat-092/test.c new file mode 100644 index 00000000000..e690be70f42 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-092/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y; + + if (__CPROVER_string_equal(y, __CPROVER_string_concat(__CPROVER_string_concat(x1, __CPROVER_string_literal("b")), __CPROVER_string_concat(__CPROVER_string_literal("a"), x2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 new file mode 100644 index 00000000000..d2b2c37349c --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 @@ -0,0 +1,207 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (cprover.str.len string.3) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_concat.s1.4 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) + +; string concatenation +(declare-fun string_concat.5 () cprover.String) +(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) +(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) +(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.6 () Bool) +(define-fun string_equal.s1.6 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(declare-fun string_equal.idx.6 () cprover.Pos) +(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) +(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) +(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) + +; convert +(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 new file mode 100644 index 00000000000..061eea0547b --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 @@ -0,0 +1,165 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "b") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) + +(define-fun string.2 () cprover.String "a") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::x2!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) + +; convert +(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B3| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; convert +(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-093/test.c b/regression/strings/Z3str2-bv/concat-093/test.c new file mode 100644 index 00000000000..69cfaccfb9d --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-093/test.c @@ -0,0 +1,20 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 new file mode 100644 index 00000000000..1947b309590 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 @@ -0,0 +1,448 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.5) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.12)) + +; convert +(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 new file mode 100644 index 00000000000..625721594a0 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 @@ -0,0 +1,350 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) + +(define-fun string.2 () cprover.String "ef") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; convert +(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-094/test.c b/regression/strings/Z3str2-bv/concat-094/test.c new file mode 100644 index 00000000000..ebaa91406c9 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-094/test.c @@ -0,0 +1,16 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y1; + __CPROVER_string y2; + + if (__CPROVER_string_equal(x, __CPROVER_string_literal("abc +efg ")) + && __CPROVER_string_equal(y1, __CPROVER_string_literal("zzz"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 new file mode 100644 index 00000000000..e69de29bb2d diff --git a/regression/strings/Z3str2-bv/concat-095/test.c b/regression/strings/Z3str2-bv/concat-095/test.c new file mode 100644 index 00000000000..3cab0d79dbc --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-095/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y1; + __CPROVER_string y2; + + if (__CPROVER_string_equal(x, __CPROVER_string_literal("abc\nefg ")) + && __CPROVER_string_equal(y1, __CPROVER_string_literal("z_ _z-\t-\\'=\"_z"))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 new file mode 100644 index 00000000000..211c0ea58d5 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 @@ -0,0 +1,215 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv10 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) +(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) +(assert (= (select string.1 (_ bv6 32)) (_ bv103 8))) +(assert (= (select string.1 (_ bv7 32)) (_ bv32 8))) +(assert (= (select string.1 (_ bv8 32)) (_ bv32 8))) +(assert (= (cprover.str.len string.1) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.2 () Bool) +(define-fun string_equal.s1.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.2 () cprover.Pos) +(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) +(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) +(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv122 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv9 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv95 8))) +(assert (= (select string.3 (_ bv4 32)) (_ bv122 8))) +(assert (= (select string.3 (_ bv5 32)) (_ bv45 8))) +(assert (= (select string.3 (_ bv6 32)) (_ bv9 8))) +(assert (= (select string.3 (_ bv7 32)) (_ bv45 8))) +(assert (= (select string.3 (_ bv8 32)) (_ bv92 8))) +(assert (= (select string.3 (_ bv9 32)) (_ bv39 8))) +(assert (= (select string.3 (_ bv10 32)) (_ bv61 8))) +(assert (= (select string.3 (_ bv11 32)) (_ bv34 8))) +(assert (= (select string.3 (_ bv12 32)) (_ bv95 8))) +(assert (= (select string.3 (_ bv13 32)) (_ bv122 8))) +(assert (= (cprover.str.len string.3) (_ bv14 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.4)) + +; convert +(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 new file mode 100644 index 00000000000..11cda204f42 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 @@ -0,0 +1,173 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc +efg ") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +(define-fun string.2 () cprover.String "z_ _z- -\'="_z") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; convert +(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B7| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-096/test.c b/regression/strings/Z3str2-bv/concat-096/test.c new file mode 100644 index 00000000000..c23fadddfd7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-096/test.c @@ -0,0 +1,20 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string m1; + __CPROVER_string m2; + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + __CPROVER_string z; + + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("c"), x2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("e"), y2))) + && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 new file mode 100644 index 00000000000..e33abd639df --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 @@ -0,0 +1,445 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.3) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.4)) + +(declare-fun string.5 () cprover.String) +(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.5) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.6 () cprover.String) +(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) +(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) +(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.7 () cprover.String) +(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) +(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) +(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) + +; string equal +(declare-fun string_equal.8 () Bool) +(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) +(declare-fun string_equal.idx.8 () cprover.Pos) +(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) +(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) +(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.8)) + +(declare-fun string.9 () cprover.String) +(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) +(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.9) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.10 () cprover.String) +(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) +(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) +(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.10) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.11 () cprover.String) +(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) +(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) +(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) +(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.11) + +; string equal +(declare-fun string_equal.12 () Bool) +(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) +(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(declare-fun string_equal.idx.12 () cprover.Pos) +(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) +(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) +(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.12)) + +; convert +(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 new file mode 100644 index 00000000000..30ccf3f93f4 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 @@ -0,0 +1,350 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; convert +(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "c") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::x2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) + +; find_symbols +(declare-fun |main::1::z!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) + +(define-fun string.2 () cprover.String "e") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) + +(define-fun string.3 () cprover.String "ce") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) + +; find_symbols +(declare-fun |main::1::m2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) + +; find_symbols +(declare-fun |main::1::m1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) + +; convert +(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) + +; convert +(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) + +; convert +(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; convert +(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) +; convert +(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) +; convert +(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) +; convert +(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) +; convert +(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) + +; convert +(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B31|)) +(get-value (|B32|)) +(get-value (|B33|)) +(get-value (|B34|)) +(get-value (|B35|)) +(get-value (|B36|)) +(get-value (|B37|)) +(get-value (|B38|)) +(get-value (|B39|)) +(get-value (|B4|)) +(get-value (|B40|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) +(get-value (|main::1::m1!0@1#1|)) +(get-value (|main::1::m2!0@1#1|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) +(get-value (|main::1::z!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-097/test.c b/regression/strings/Z3str2-bv/concat-097/test.c new file mode 100644 index 00000000000..1a16b0d0b1e --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-097/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 new file mode 100644 index 00000000000..b2b8937b50f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 new file mode 100644 index 00000000000..d90dccc262f --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-098/test.c b/regression/strings/Z3str2-bv/concat-098/test.c new file mode 100644 index 00000000000..9c649b7d449 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-098/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 3)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 new file mode 100644 index 00000000000..4bd5a6d75ad --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 new file mode 100644 index 00000000000..6eb778c6890 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-099/test.c b/regression/strings/Z3str2-bv/concat-099/test.c new file mode 100644 index 00000000000..5e200a7c3b7 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-099/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string n; + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) + && (__CPROVER_string_length(x) == 5)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 new file mode 100644 index 00000000000..c2fc06ac595 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 @@ -0,0 +1,210 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.1) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) +(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.3 () cprover.String) +(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) +(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) +(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 new file mode 100644 index 00000000000..31793079019 --- /dev/null +++ b/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 @@ -0,0 +1,180 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::n!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::n!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-001/test.c b/regression/strings/Z3str2-bv/length-001/test.c new file mode 100644 index 00000000000..1504149446b --- /dev/null +++ b/regression/strings/Z3str2-bv/length-001/test.c @@ -0,0 +1,12 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + + if (((unsigned)3) >= ((unsigned)__CPROVER_string_length(x))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 new file mode 100644 index 00000000000..de4b90c38e2 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 @@ -0,0 +1,96 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B3| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 new file mode 100644 index 00000000000..7f5f5ebdfb3 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 @@ -0,0 +1,100 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B3| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-002/test.c b/regression/strings/Z3str2-bv/length-002/test.c new file mode 100644 index 00000000000..da583e8b664 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-002/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + + if ((__CPROVER_string_equal(x, __CPROVER_string_literal("f")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd"))) + && ((unsigned)__CPROVER_string_length(x)) > ((unsigned)3) + && ((unsigned)__CPROVER_string_length(x)) < ((unsigned)5)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 new file mode 100644 index 00000000000..e49abcdb270 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 @@ -0,0 +1,297 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$7!0@1#5| () Bool) +; convert +(define-fun |B7| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; convert +(define-fun |B8| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; convert +(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv102 8))) +(assert (= (cprover.str.len string.1) (_ bv1 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.2 () Bool) +(define-fun string_equal.s1.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.2 () cprover.Pos) +(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) +(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) +(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$7!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#3| () Bool |main::$tmp::tmp_if_expr$7!0@1#1|) + +(declare-fun string.3 () cprover.String) +(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.3) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) + +; string equal +(declare-fun string_equal.4 () Bool) +(define-fun string_equal.s1.4 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) +(declare-fun string_equal.idx.4 () cprover.Pos) +(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) +(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) +(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool string_equal.4) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$7!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::tmp_if_expr$7!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))))) + +; convert +(define-fun |B14| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::$tmp::tmp_if_expr$7!0@1#1| |main::$tmp::tmp_if_expr$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::tmp_if_expr$7!0@1#5|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::tmp_if_expr$7!0@1#5|)) + +; convert +(define-fun |B24| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B25| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 new file mode 100644 index 00000000000..48d052838e2 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 @@ -0,0 +1,274 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$7!0@1#5| () Bool) +; convert +(define-fun |B7| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; convert +(define-fun |B8| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; convert +(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "f") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$7!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#3| () Bool |main::$tmp::tmp_if_expr$7!0@1#1|) + +(define-fun string.2 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$7!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$7!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::tmp_if_expr$7!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))))) + +; convert +(define-fun |B14| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::$tmp::tmp_if_expr$7!0@1#1| |main::$tmp::tmp_if_expr$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::tmp_if_expr$7!0@1#5|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::tmp_if_expr$7!0@1#5|)) + +; convert +(define-fun |B24| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B25| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$7!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-003/test.c b/regression/strings/Z3str2-bv/length-003/test.c new file mode 100644 index 00000000000..83ec2594e46 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-003/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(y, __CPROVER_string_literal("abcde")) + && __CPROVER_string_equal(y, x) + && ((unsigned)__CPROVER_string_length(x)) <= ((unsigned)5)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 new file mode 100644 index 00000000000..c63e690f019 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 @@ -0,0 +1,205 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) +(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) +(assert (= (cprover.str.len string.1) (_ bv5 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.2 () Bool) +(define-fun string_equal.s1.2 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.2 () cprover.Pos) +(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) +(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) +(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::1::x!0@1#1|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B15| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 new file mode 100644 index 00000000000..ebcd97aaf6f --- /dev/null +++ b/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 @@ -0,0 +1,183 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abcde") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::1::x!0@1#1|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B15| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-004/test.c b/regression/strings/Z3str2-bv/length-004/test.c new file mode 100644 index 00000000000..28379a13400 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-004/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(y, x) + && (__CPROVER_string_length(y) == 4) + && (__CPROVER_string_equal(x, __CPROVER_string_literal("fg")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd")))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 new file mode 100644 index 00000000000..b819e2bc99c --- /dev/null +++ b/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 @@ -0,0 +1,327 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B16| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B17| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.1 () Bool) +(define-fun string_equal.s1.1 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.1 () cprover.String |main::1::x!0@1#1|) +(declare-fun string_equal.idx.1 () cprover.Pos) +(assert (=> string_equal.1 (= (cprover.str.len string_equal.s1.1) (cprover.str.len string_equal.s2.1)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.1 (bvult ?n (cprover.str.len string_equal.s1.1))) (= (select string_equal.s1.1 ?n) (select string_equal.s2.1 ?n))))) +(assert (=> (not string_equal.1) (or (not (= (cprover.str.len string_equal.s1.1) (cprover.str.len string_equal.s2.1))) +(and (bvult string_equal.idx.1 (cprover.str.len string_equal.s1.1)) (not (= (select string_equal.s1.1 string_equal.idx.1) (select string_equal.s2.1 string_equal.idx.1))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.1)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv102 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv103 8))) +(assert (= (cprover.str.len string.2) (_ bv2 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.4 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.4) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::x!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.5) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; convert +(define-fun |B18| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B19| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$5!0@1#5|) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B30| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 new file mode 100644 index 00000000000..7421b2d9947 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 @@ -0,0 +1,293 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) + +; convert +(define-fun |B16| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) +; convert +(define-fun |B17| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::y!0@1#1| |main::1::x!0@1#1|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) + +(define-fun string.1 () cprover.String "fg") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) + +; find_symbols +(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) + +(define-fun string.2 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; set_to true (equal) +(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; set_to true +(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) + +; convert +(define-fun |B18| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B19| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) + +; convert +(define-fun |B24| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::tmp_if_expr$5!0@1#5|) + +; convert +(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) + +; convert +(define-fun |B30| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B30|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) +(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-005/test.c b/regression/strings/Z3str2-bv/length-005/test.c new file mode 100644 index 00000000000..cbde6cd9715 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-005/test.c @@ -0,0 +1,15 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + + if (__CPROVER_string_equal(__CPROVER_string_literal("abcd"), __CPROVER_string_concat(x, y)) + && ((unsigned)__CPROVER_string_length(y)) >= ((unsigned)3) + && ((unsigned)__CPROVER_string_length(x)) >= ((unsigned)1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 new file mode 100644 index 00000000000..eac8fc4c19b --- /dev/null +++ b/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 @@ -0,0 +1,219 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B16| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 new file mode 100644 index 00000000000..a39228d21ed --- /dev/null +++ b/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 @@ -0,0 +1,200 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) +; convert +(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) +; convert +(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) + +; convert +(define-fun |B15| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) + +; convert +(define-fun |B16| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-006/test.c b/regression/strings/Z3str2-bv/length-006/test.c new file mode 100644 index 00000000000..fd57807ad05 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-006/test.c @@ -0,0 +1,13 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x; + __CPROVER_string y; + + if ((__CPROVER_string_length(__CPROVER_string_concat(x, y)) == 1)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 new file mode 100644 index 00000000000..950ad0fffcc --- /dev/null +++ b/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 @@ -0,0 +1,124 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B5| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 new file mode 100644 index 00000000000..62d1e92fac6 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 @@ -0,0 +1,118 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; convert +(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) +; convert +(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; convert +(define-fun |B5| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-007/test.c b/regression/strings/Z3str2-bv/length-007/test.c new file mode 100644 index 00000000000..03ec7c5c3ba --- /dev/null +++ b/regression/strings/Z3str2-bv/length-007/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string y1; + __CPROVER_string y2; + + if (__CPROVER_string_equal(__CPROVER_string_concat(x1, x2), __CPROVER_string_literal("testhello")) + && (__CPROVER_string_length(x1) == 1) + && __CPROVER_string_equal(__CPROVER_string_concat(y1, y2), __CPROVER_string_literal("testhello")) + && (__CPROVER_string_length(y2) == 5)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 new file mode 100644 index 00000000000..dac159f3a67 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 @@ -0,0 +1,328 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::x2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.1) + +(declare-fun string.2 () cprover.String) +(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) +(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) +(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) +(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) +(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) +(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) +(assert (= (cprover.str.len string.2) (_ bv9 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.4 () cprover.String) +(define-fun string_concat.s0.4 () cprover.String |main::1::y1!0@1#1|) +(define-fun string_concat.s1.4 () cprover.String |main::1::y2!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) +(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) +(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.4) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y2!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B14| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B29| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 new file mode 100644 index 00000000000..c77c6508da0 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 @@ -0,0 +1,284 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::1::x2!0@1#1|)) + +(define-fun string.1 () cprover.String "testhello") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) + +; find_symbols +(declare-fun |main::1::y1!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::y2!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::1::y2!0@1#1|)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y2!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +; convert +(define-fun |B14| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B16| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) + +; convert +(define-fun |B17| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) + +; convert +(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B29| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B27|)) +(get-value (|B28|)) +(get-value (|B29|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::y1!0@1#1|)) +(get-value (|main::1::y2!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-008/test.c b/regression/strings/Z3str2-bv/length-008/test.c new file mode 100644 index 00000000000..83449888f8b --- /dev/null +++ b/regression/strings/Z3str2-bv/length-008/test.c @@ -0,0 +1,18 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + __CPROVER_string x1; + __CPROVER_string x2; + __CPROVER_string x3; + __CPROVER_string y; + + if (__CPROVER_string_equal(y, __CPROVER_string_concat(x1, __CPROVER_string_concat(x2, x3))) + && __CPROVER_string_equal(x2, __CPROVER_string_literal("abc")) + && (__CPROVER_string_length(x1) == 1) + && (__CPROVER_string_length(y) == 4)) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 new file mode 100644 index 00000000000..4493c79d7d2 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 @@ -0,0 +1,303 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x3!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.1 () cprover.String) +(define-fun string_concat.s0.1 () cprover.String |main::1::x2!0@1#1|) +(define-fun string_concat.s1.1 () cprover.String |main::1::x3!0@1#1|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) +(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) +(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.1) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; string concatenation +(declare-fun string_concat.2 () cprover.String) +(define-fun string_concat.s0.2 () cprover.String |main::1::x1!0@1#1|) +(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) +(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) +(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) +(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; string equal +(declare-fun string_equal.3 () Bool) +(define-fun string_equal.s1.3 () cprover.String |main::1::y!0@1#1|) +(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) +(declare-fun string_equal.idx.3 () cprover.Pos) +(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) +(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) +(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) + +(declare-fun string.4 () cprover.String) +(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) +(assert (= (cprover.str.len string.4) (_ bv3 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) + +; string equal +(declare-fun string_equal.5 () Bool) +(define-fun string_equal.s1.5 () cprover.String |main::1::x2!0@1#1|) +(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) +(declare-fun string_equal.idx.5 () cprover.Pos) +(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) +(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) +(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) +(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.5)) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x3!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 new file mode 100644 index 00000000000..d4f619f8eb7 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 @@ -0,0 +1,265 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) +; convert +(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; convert +(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) +; convert +(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; convert +(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +; find_symbols +(declare-fun |main::1::x2!0@1#1| () cprover.String) +; find_symbols +(declare-fun |main::1::x3!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x2!0@1#1| |main::1::x3!0@1#1|)) + +; find_symbols +(declare-fun |main::1::x1!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) + +; find_symbols +(declare-fun |main::1::y!0@1#1| () cprover.String) +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) + +(define-fun string.1 () cprover.String "abc") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) + +; set_to true +(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) + +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +; convert +(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) + +; convert +(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) + +; convert +(define-fun |B14| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) + +; convert +(define-fun |B15| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) +; convert +(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) +; convert +(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) +; convert +(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) +; convert +(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) +; convert +(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) + +; set_to true +(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) + +; convert +(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) + +; convert +(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) + +; convert +(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B11|)) +(get-value (|B12|)) +(get-value (|B13|)) +(get-value (|B14|)) +(get-value (|B15|)) +(get-value (|B16|)) +(get-value (|B17|)) +(get-value (|B18|)) +(get-value (|B19|)) +(get-value (|B2|)) +(get-value (|B20|)) +(get-value (|B21|)) +(get-value (|B22|)) +(get-value (|B23|)) +(get-value (|B24|)) +(get-value (|B25|)) +(get-value (|B26|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) +(get-value (|main::1::x1!0@1#1|)) +(get-value (|main::1::x2!0@1#1|)) +(get-value (|main::1::x3!0@1#1|)) +(get-value (|main::1::y!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-009/test.c b/regression/strings/Z3str2-bv/length-009/test.c new file mode 100644 index 00000000000..1899058fbdd --- /dev/null +++ b/regression/strings/Z3str2-bv/length-009/test.c @@ -0,0 +1,14 @@ +#include +#include "../../cprover-string-hack.h" + +int main() +{ + unsigned int i; + __CPROVER_string x; + + if ((__CPROVER_string_length(__CPROVER_string_literal("abcd")) == i) + && ((int)__CPROVER_string_length(x)) > ((int)(i + 1))) { + assert(0); + } + return 0; +} diff --git a/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 new file mode 100644 index 00000000000..5c1f84b48b5 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 @@ -0,0 +1,156 @@ +; SMT 2 +; Generated for Z3 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +; string support via PASS-style quantified arrays +(define-sort cprover.Char () (_ BitVec 8)) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-sort cprover.String () (Array cprover.Pos cprover.Char)) +(declare-fun cprover.str.len (cprover.String) cprover.Pos) + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; convert +(define-fun |B1| () Bool |goto_symex::&92;guard#1|) + +; convert +(define-fun |B2| () Bool |goto_symex::&92;guard#1|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B3| () Bool (and |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) + +(declare-fun string.1 () cprover.String) +(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) +(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) +(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) +(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) +(assert (= (cprover.str.len string.1) (_ bv4 32))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (not (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)))) + +; convert +(define-fun |B4| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B9| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) + +; convert +(define-fun |B10| () Bool (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 new file mode 100644 index 00000000000..82bc27d0e39 --- /dev/null +++ b/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 @@ -0,0 +1,157 @@ +; SMT 2 +; Generated for CVC 4 +(set-info :source "Generated by CBMC 5.4") +(set-option :produce-models true) +(set-logic ALL_SUPPORTED) +; string support via QF_S SMT-LIB logic +(define-sort cprover.String () String) +(define-sort cprover.Char () String) +(define-sort cprover.Pos () (_ BitVec 32)) +(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) + + +; find_symbols +(declare-fun |goto_symex::&92;guard#1| () Bool) +; convert +(define-fun |B0| () Bool |goto_symex::&92;guard#1|) + +; convert +(define-fun |B1| () Bool |goto_symex::&92;guard#1|) + +; convert +(define-fun |B2| () Bool |goto_symex::&92;guard#1|) + +; find_symbols +(declare-fun |goto_symex::&92;guard#2| () Bool) +; convert +(define-fun |B3| () Bool (and |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) + +; set_to true (equal) +(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) + +; set_to true (equal) +(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) + +; the following is a substitute for lambda i. x +(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) +; set_to true (equal) +(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) + +(define-fun string.1 () cprover.String "abcd") +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) + +(declare-fun string_length.0 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) + +; find_symbols +(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) +; set_to true +(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) + +; find_symbols +(declare-fun |main::1::x!0@1#1| () cprover.String) +(declare-fun string_length.1 () (_ BitVec 32)) +(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) +; set_to true (equal) +(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) + +; set_to true +(assert (= |goto_symex::&92;guard#2| (not (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)))) + +; convert +(define-fun |B4| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) + +; convert +(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) +; convert +(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) + +; find_symbols +(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) +; convert +(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) + +; set_to true +(assert |goto_symex::&92;guard#1|) + +; set_to true +(assert |goto_symex::&92;guard#2|) + +; convert +(define-fun |B9| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) + +; convert +(define-fun |B10| () Bool (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) + +(check-sat) + +(get-value (|B0|)) +(get-value (|B1|)) +(get-value (|B10|)) +(get-value (|B2|)) +(get-value (|B3|)) +(get-value (|B4|)) +(get-value (|B5|)) +(get-value (|B6|)) +(get-value (|B7|)) +(get-value (|B8|)) +(get-value (|B9|)) +(get-value (|__CPROVER_dead_object#1|)) +(get-value (|__CPROVER_deallocated#1|)) +(get-value (|__CPROVER_malloc_is_new_array#1|)) +(get-value (|__CPROVER_malloc_object#1|)) +(get-value (|__CPROVER_malloc_size#1|)) +(get-value (|__CPROVER_memory_leak#1|)) +(get-value (|__CPROVER_next_thread_id#1|)) +(get-value (|__CPROVER_pipe_count#1|)) +(get-value (|__CPROVER_rounding_mode!0#1|)) +(get-value (|__CPROVER_thread_id!0#1|)) +(get-value (|__CPROVER_threads_exited#1|)) +(get-value (|goto_symex::&92;guard#1|)) +(get-value (|goto_symex::&92;guard#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) +(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) +(get-value (|main::1::i!0@1#1|)) +(get-value (|main::1::x!0@1#1|)) + +(exit) +; end of SMT2 file From 8be3253437721030081f5b5e3e7a8f1f088b647b Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 8 Jul 2016 17:38:46 +0200 Subject: [PATCH 017/221] started working on string support in the SAT backend (via PASS-like axiom instantiation) Only stubs so far --- src/solvers/flattening/boolbv.cpp | 33 +++++++-- src/solvers/flattening/boolbv.h | 1 + src/solvers/refinement/bv_refinement.h | 4 +- src/solvers/refinement/string_refinement.h | 81 ++++++++++++++++++++++ 4 files changed, 110 insertions(+), 9 deletions(-) create mode 100644 src/solvers/refinement/string_refinement.h diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index b074b8a40a6..0fb6226caa9 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -350,13 +350,7 @@ void boolbvt::convert_bitvector(const exprt &expr, bvt &bv) } else if(expr.id()==ID_function_application) { - // make it free bits - bv=prop.new_variables(boolbv_width(expr.type())); - - // record - functions.record(to_function_application_expr(expr)); - - return; + return convert_function_application(to_function_application_expr(expr), bv); } else if(expr.id()==ID_reduction_or || expr.id()==ID_reduction_and || expr.id()==ID_reduction_nor || expr.id()==ID_reduction_nand || @@ -509,6 +503,31 @@ void boolbvt::convert_symbol(const exprt &expr, bvt &bv) } } } + + +/*******************************************************************\ + +Function: boolbvt::convert_function_application + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +void boolbvt::convert_function_application( + const function_application_exprt &expr, bvt &bv) +{ + // make it free bits + bv=prop.new_variables(boolbv_width(expr.type())); + + // record + functions.record(expr); + return; +} + /*******************************************************************\ diff --git a/src/solvers/flattening/boolbv.h b/src/solvers/flattening/boolbv.h index 024f9e3a6ee..c1e81e3f2e0 100644 --- a/src/solvers/flattening/boolbv.h +++ b/src/solvers/flattening/boolbv.h @@ -164,6 +164,7 @@ class boolbvt:public arrayst virtual void convert_reduction(const unary_exprt &expr, bvt &bv); virtual void convert_not(const not_exprt &expr, bvt &bv); virtual void convert_power(const binary_exprt &expr, bvt &bv); + virtual void convert_function_application(const function_application_exprt &expr, bvt &bv); virtual void make_bv_expr(const typet &type, const bvt &bv, exprt &dest); virtual void make_free_bv_expr(const typet &type, exprt &dest); diff --git a/src/solvers/refinement/bv_refinement.h b/src/solvers/refinement/bv_refinement.h index b97b847ef67..471bb6247bf 100644 --- a/src/solvers/refinement/bv_refinement.h +++ b/src/solvers/refinement/bv_refinement.h @@ -83,8 +83,8 @@ class bv_refinementt:public bv_pointerst void get_values(approximationt &approximation); bool is_in_conflict(approximationt &approximation); - void check_SAT(); - void check_UNSAT(); + virtual void check_SAT(); + virtual void check_UNSAT(); bool progress; // we refine the theory of arrays diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h new file mode 100644 index 00000000000..730360f1855 --- /dev/null +++ b/src/solvers/refinement/string_refinement.h @@ -0,0 +1,81 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String support via axiom instantiation + (see the PASS paper at HVC'13) + +Author: Alberto Griggio, alberto.griggio@gmail.com + +\*******************************************************************/ + +#ifndef CPROVER_SOLVER_STRING_REFINEMENT_H +#define CPROVER_SOLVER_STRING_REFINEMENT_H + +#include + +#include + +class string_refinementt: public bv_refinementt +{ +public: + string_refinementt(const namespacet &_ns, propt &_prop); + ~string_refinementt(); + + virtual decision_proceduret::resultt dec_solve(); + + virtual std::string decision_procedure_text() const + { return "string refinement loop with "+prop.solver_text(); } + + typedef bv_refinementt SUB; + +protected: + struct string_axiomt + { + public: + explicit string_axiomt(unsigned i=0): id_nr(i) {} + + unsigned id_nr; + literalt lit; + exprt idx; + exprt premise; + exprt body; + + std::string as_string() const; + }; + + virtual void convert_symbol(const exprt &expr, bvt &bv); + virtual void convert_struct(const struct_exprt &expr, bvt &bv); + virtual void convert_function_application( + const function_application_exprt &expr, bvt &bv); + virtual void set_to(const exprt &expr, bool value); + virtual void check_SAT(); + + bool is_string_type(const typet &type); + bool is_char_type(const typet &type); + + void convert_string_equal(const function_application_exprt &f, bvt &bv); + void convert_string_length(const function_application_exprt &f, bvt &bv); + void convert_string_concat(const function_application_exprt &f, bvt &bv); + void convert_string_substring(const function_application_exprt &f, bvt &bv); + void convert_string_is_prefix(const function_application_exprt &f, bvt &bv); + void convert_string_is_suffix(const function_application_exprt &f, bvt &bv); + void convert_string_literal(const function_application_exprt &f, bvt &bv); + void convert_char_literal(const function_application_exprt &f, bvt &bv); + void convert_string_char_at(const function_application_exprt &f, bvt &bv); + void convert_string_char_set(const function_application_exprt &f, bvt &bv); + + irep_idt string_literal_func; + irep_idt char_literal_func; + irep_idt string_length_func; + irep_idt string_equal_func; + irep_idt string_char_at_func; + irep_idt string_concat_func; + irep_idt string_substring_func; + irep_idt string_is_prefix_func; + irep_idt string_is_suffix_func; + irep_idt string_char_set_func; + size_t string_length_width; + + std::vector string_axioms; +}; + +#endif From 599b3430ea24c1d19711b8533e45717d4b8ee67f Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 15 Jul 2016 12:14:35 +0200 Subject: [PATCH 018/221] continued working on string refinement --- src/solvers/flattening/boolbv.cpp | 11 +- src/solvers/flattening/boolbv.h | 2 +- src/solvers/refinement/string_refinement.cpp | 578 +++++++++++++++++++ src/solvers/refinement/string_refinement.h | 63 +- src/solvers/smt2/smt2_conv.cpp | 5 +- 5 files changed, 632 insertions(+), 27 deletions(-) create mode 100644 src/solvers/refinement/string_refinement.cpp diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index a9bf179b2d9..b5b2c393677 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -513,15 +513,14 @@ Function: boolbvt::convert_function_application \*******************************************************************/ -void boolbvt::convert_function_application( - const function_application_exprt &expr, bvt &bv) +bvt boolbvt::convert_function_application( + const function_application_exprt &expr) { - // make it free bits - bv=prop.new_variables(boolbv_width(expr.type())); - // record functions.record(expr); - return; + + // make it free bits + return prop.new_variables(boolbv_width(expr.type())); } diff --git a/src/solvers/flattening/boolbv.h b/src/solvers/flattening/boolbv.h index 86111f1f988..f56cc4db294 100644 --- a/src/solvers/flattening/boolbv.h +++ b/src/solvers/flattening/boolbv.h @@ -169,7 +169,7 @@ class boolbvt:public arrayst virtual bvt convert_bv_reduction(const unary_exprt &expr); virtual bvt convert_not(const not_exprt &expr); virtual bvt convert_power(const binary_exprt &expr); - virtual void convert_function_application(const function_application_exprt &expr, bvt &bv); + virtual bvt convert_function_application(const function_application_exprt &expr); virtual void make_bv_expr(const typet &type, const bvt &bv, exprt &dest); virtual void make_free_bv_expr(const typet &type, exprt &dest); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp new file mode 100644 index 00000000000..5912e042d0a --- /dev/null +++ b/src/solvers/refinement/string_refinement.cpp @@ -0,0 +1,578 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String support via axiom instantiation + (see the PASS paper at HVC'13) + +Author: Alberto Griggio, alberto.griggio@gmail.com + +\*******************************************************************/ + +#include + +string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): + SUB(_ns, _prop) +{ + string_literal_func = "__CPROVER_uninterpreted_string_literal"; + char_literal_func = "__CPROVER_uninterpreted_char_literal"; + string_length_func = "__CPROVER_uninterpreted_strlen"; + string_equal_func = "__CPROVER_uninterpreted_string_equal"; + string_char_at_func = "__CPROVER_uninterpreted_char_at"; + string_concat_func = "__CPROVER_uninterpreted_strcat"; + string_substring_func = "__CPROVER_uninterpreted_substring"; + string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; + string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; + string_char_set_func = "__CPROVER_uninterpreted_char_set"; + string_length_width = 32; // TODO! + next_symbol_id = 1; +} + + +string_refinementt::~string_refinementt() +{ +} + + +void string_refinementt::post_process() +{ + // Ackermann expansion for string lengths + for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); + i != end; ++i) { + exprt si = make_array(i->first); + exprt leni = i->second; + + expr_mapt::iterator j = i; + for (++j; j != end; ++j) { + exprt sj = make_array(j->first); + exprt lenj = j->second; + + implies_exprt lemma(equal_exprt(si, sj), equal_exprt(leni, lenj)); + prop.l_set_to_true(convert(lemma)); + } + } + + add_instantiations(); +} + + +bvt string_refinementt::convert_symbol(const exprt &expr) +{ + const typet &type = expr.type(); + const irep_idt &identifier = expr.get(ID_identifier); + + if (is_string_type(type)) { + bvt ret = convert_bv(make_array(expr)); + make_length(expr); // ensure there is a length for this string + map.set_literals(identifier, type, ret); + return ret; + } else if (is_char_type(expr.type())) { + symbol_exprt c = fresh_symbol("char", char_type()); + bvt ret = SUB::convert_symbol(c); + map.set_literals(identifier, type, ret); + return ret; + } else { + return SUB::convert_symbol(expr); + } +} + + +bvt string_refinementt::convert_struct(const struct_exprt &expr) +{ + if (is_string_type(expr.type()) || is_char_type(expr.type())) { + return bvt(); + } else { + return SUB::convert_struct(expr); + } +} + + +bvt string_refinementt::convert_function_application( + const function_application_exprt &expr) +{ + const exprt &name = expr.function(); + bool ok = false; + + // check if this is something we recognize + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + if (id == string_literal_func) { + return convert_string_literal(expr); + } else if (id == char_literal_func) { + return convert_char_literal(expr); + } else if (id == string_length_func) { + return convert_string_length(expr); + } else if (id == string_equal_func) { + return convert_string_equal(expr); + } else if (id == string_char_at_func) { + return convert_string_char_at(expr); + } else if (id == string_concat_func) { + return convert_string_concat(expr); + } else if (id == string_substring_func) { + return convert_string_substring(expr); + } else if (id == string_is_prefix_func) { + return convert_string_is_prefix(expr); + } else if (id == string_is_suffix_func) { + return convert_string_is_suffix(expr); + } else if (id == string_char_set_func) { + return convert_string_char_set(expr); + } + } + + return SUB::convert_function_application(expr); +} + + +void string_refinementt::check_SAT() +{ + SUB::check_SAT(); + if (!progress) { + if (!check_axioms()) { + progress = true; + add_instantiations(); + } + } +} + + +bool string_refinementt::is_string_type(const typet &type) +{ + if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return tag == irep_idt("__CPROVER_string"); + } + return false; +} + + +bool string_refinementt::is_char_type(const typet &type) +{ + if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return tag == irep_idt("__CPROVER_char"); + } + return false; +} + + +bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) +{ + bvt ret; + ret.push_back(convert(boole)); + size_t width = boolbv_width(orig.type()); + for (size_t i = 1; i < width; ++i) { + ret.push_back(const_literal(false)); + } + return ret; +} + + +bvt string_refinementt::convert_string_equal( + const function_application_exprt &f) +{ + symbol_exprt eq = fresh_symbol("equal"); + bvt bv = convert_bool_bv(eq, f); + + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 2, "bad args to string equal"); + + const exprt &s1 = args[0]; + const exprt &s2 = args[1]; + + symbol_exprt witness = fresh_symbol("index", index_type()); + exprt s1len = make_length(s1); + exprt s2len = make_length(s2); + + implies_exprt lemma1(eq, equal_exprt(s1len, s2len)); + prop.l_set_to_true(convert(lemma1)); + + string_axiomt a(string_axioms.size()); + a.idx = witness; + a.lit = bv[0]; + exprt s1arr = make_array(s1); + exprt s2arr = make_array(s2); + a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.body = equal_exprt(index_exprt(s1arr, witness), + index_exprt(s2arr, witness)); + string_axioms.push_back(a); + + implies_exprt lemma2( + not_exprt(eq), + or_exprt(notequal_exprt(s1len, s2len), + and_exprt(binary_relation_exprt(witness, ID_lt, s1len), + notequal_exprt(index_exprt(s1arr, witness), + index_exprt(s2arr, witness))))); + prop.l_set_to_true(convert(lemma2)); + + return bv; +} + + +bvt string_refinementt::convert_string_length( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 1, "bad args to string length"); + + expr len = make_length(args[0]); + bv = convert_bv(len); + return bv; +} + + +bvt string_refinementt::convert_string_concat( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 2, "bad args to string concat"); + + exprt arr = make_array(f); + bv = convert_bv(arr); + + const exprt &s1 = args[0]; + const exprt &s2 = args[1]; + + exprt len = make_length(f); + exprt s1len = make_length(s1); + exprt s2len = make_length(s2); + + exprt s1arr = make_array(s1); + exprt s2arr = make_array(s2); + + equal_exprt lemma1(len, plus_exprt(s1len, s2len)); + prop.l_set_to_true(convert(lemma1)); + + binary_relation_exprt lemma2(len, ID_ge, s1len); + prop.l_set_to_true(convert(lemma2)); + + binary_relation_exprt lemma3(len, ID_ge, s2len); + prop.l_set_to_true(convert(lemma3)); + + symbol_exprt idx = fresh_symbol("index", index_type()); + + string_axiomt a1(string_axioms.size()); + a1.idx = idx; + a1.lit = literalt(); + a1.premise = binary_relation_exprt(idx, ID_lt, s1len); + a1.body = equal_exprt(index_exprt(s1arr, idx), + index_exprt(arr, idx)); + string_axioms.push_back(a1); + + string_axiomt a2(string_axioms.size()); + a2.idx = idx; + a2.lit = literalt(); + a2.premise = binary_relation_exprt(idx, ID_lt, s2len); + a2.body = equal_exprt(index_exprt(s2arr, idx), + index_exprt(arr, plus_exprt(s1len, idx))); + string_axioms.push_back(a2); + + return bv; +} + + +bvt string_refinementt::convert_string_substring( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 3, "bad args to string substring"); + + exprt arr = make_array(f); + bv = convert_bv(arr); + + exprt len = make_length(f); + + exprt sarr = make_array(args[0]); + exprt slen = make_length(args[0]); + typecast_exprt i(args[1], index_type()); + typecast_exprt j(args[2], index_type()); + + exprt idx = fresh_symbol("index", index_type()); + + string_axiomt a(string_axioms.size()); + a.idx = idx; + a.lit = literalt(); + a.premise = binary_relation_exprt(idx, ID_lt, len); + a.body = equal_exprt(index_exprt(arr, idx), + index_exprt(sarr, plus_exprt(i, idx))); + string_axioms.push_back(a); + + and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), + and_exprt(binary_relation_exprt(j, ID_le, slen), + equal_exprt(len, minus_exprt(j, i)))); + prop.l_set_to_true(convert(lemma1)); + + binary_relation_exprt lemma2(slen, ID_ge, len); + prop.l_set_to_true(convert(lemma2)); + + return bv; +} + + +bvt string_refinementt::convert_string_is_prefix( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 2, "bad args to string isprefix"); + + symbol_exprt isprefix = fresh_symbol("isprefix"); + bv = convert_bool_bv(isprefix, f); + + exprt slen = make_length(args[0]); + exprt sarr = make_array(args[0]); + exprt s1len = make_length(args[1]); + exprt s1arr = make_array(args[1]); + + implies_exprt lemma1(isprefix, binary_relation_exprt(slen, ID_ge, s1len)); + prop.l_set_to_true(convert(lemma1)); + + symbol_exprt witness = fresh_symbol("index", index_type()); + + string_axiomt a(string_axioms.size()); + a.idx = witness; + a.lit = bv[0]; + a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.body = equal_exprt(index_exprt(s1arr, witness), + index_exprt(sarr, witness)); + string_axioms.push_back(a); + + implies_exprt lemma2( + not_exprt(isprefix), + or_exprt(not_exprt(binary_relation_exprt(slen, ID_ge, s1len)), + and_exprt(binary_relation_exprt(witness, ID_lt, s1len), + notequal_exprt(index_exprt(s1arr, witness), + index_exprt(sarr, witness))))); + prop.l_set_to_true(convert(lemma2)); + + return bv; +} + + +bvt string_refinementt::convert_string_is_suffix( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 2, "bad args to string issuffix"); + + symbol_exprt issuffix = fresh_symbol("issuffix"); + bv = convert_bool_bv(issuffix, f); + + exprt slen = make_length(args[0]); + exprt sarr = make_array(args[0]); + exprt s1len = make_length(args[1]); + exprt s1arr = make_array(args[1]); + + implies_exprt lemma1(isprefix, binary_relation_exprt(slen, ID_ge, s1len)); + prop.l_set_to_true(convert(lemma1)); + + symbol_exprt witness = fresh_symbol("index", index_type()); + + string_axiomt a(string_axioms.size()); + a.idx = witness; + a.lit = bv[0]; + a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.body = equal_exprt( + index_exprt(s1arr, witness), + index_exprt(sarr, + plus_exprt(witness, minus_exprt(slen, s1len)))); + string_axioms.push_back(a); + + implies_exprt lemma2( + not_exprt(isprefix), + or_exprt(not_exprt(binary_relation_exprt(slen, ID_ge, s1len)), + and_exprt(binary_relation_exprt(witness, ID_lt, s1len), + notequal_exprt( + index_exprt(s1arr, witness), + index_exprt(sarr, + plus_exprt(witness, + minus_exprt(slen, s1len))))))); + prop.l_set_to_true(convert(lemma2)); + + return bv; +} + + +bvt string_refinementt::convert_string_literal( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 1, "bad args to string literal"); + + const exprt &arg = args[0]; + if (arg.operands().size() == 1 && + arg.operands()[0].operands().size() == 1 && + arg.operands()[0].operands()[0].operands().size() == 2 && + arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ + const exprt &s = arg.operands()[0].operands()[0].operands()[0]; + irep_idt sval = to_string_constant(s).get_value(); + exprt arr = make_array(f); + bv = convert_bv(arr); + + for (std::size_t i = 0; i < sval.size(); ++i) { + constant_exprt idx(i2string(i), index_type()); + constant_exprt c(i2string(int(sval[i])), char_type()); + equal_exprt lemma(index_exprt(arr, idx), c); + prop.l_set_to_true(convert(lemma)); + } + exprt len = make_length(f); + equal_exprt lemma(len, constant_exprt(sval.size(), index_type())); + prop.l_set_to_true(convert(lemma)); + } else { + expect(false, "bad arg to string literal"); + } + + return bv; +} + + +bvt string_refinementt::convert_char_literal( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 1, "bad args to char literal"); + + const exprt &arg = args[0]; + if (arg.operands().size() == 1 && + arg.operands()[0].operands().size() == 1 && + arg.operands()[0].operands()[0].operands().size() == 2 && + arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ + const exprt &s = arg.operands()[0].operands()[0].operands()[0]; + irep_idt sval = to_string_constant(s).get_value(); + expect(sval.size() == 1, "bad literal in char literal"); + + bv = convert_bv(constant_exprt(int(sval[0]), char_type())); + } else { + expect(false, "char literal"); + } + + return bv; +} + + +bvt string_refinementt::convert_string_char_at( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 2, "bad args to string_char_at"); + + exprt arr = make_array(args[0]); + typecast_exprt pos(args[1], index_type()); + bv = convert_bv(index_exprt(arr, pos)); + return bv; +} + + +bvt string_refinementt::convert_string_char_set( + const function_application_exprt &f) +{ + bvt bv; + const function_application_exprt::argumentst &args = f.arguments(); + expect(args.size() == 3, "bad args to string_char_set"); + + exprt arr = make_array(f); + bv = convert_bv(arr); + exprt len = make_length(f); + + exprt sarr = make_array(args[0]); + exprt slen = make_length(args[0]); + typecast_exprt idx(args[1], index_type()); + + symbol_exprt c = fresh_symbol("char", char_type()); + bvt bva = convert_bv(args[2]); + bvt bvc = convert_bv(c); + bva.resize(bvc.size(), const_literal(false)); + for (size_t i = 0; i < bvc.size(); ++i) { + prop.set_equal(bva[i], bvc[i]); + } + + implies_exprt lemma(binary_relation_exprt(idx, ID_lt, slen), + and_exprt(equal_exprt(arr, update_exprt(sarr, idx, c)), + equal_exprt(len, slen))); + prop.l_set_to_true(convert(lemma)); + + return bv; +} + + +void string_refinementt::add_instantiations() +{ +} + + +bool string_refinementt::check_axioms() +{ + return false; +} + + +void string_refinementt::update_index_set(const exprt &formula) +{ +} + + +exprt string_refinementt::instantiate(const string_axiomt &axiom, + const exprt &str, const exprt &val) +{ +} + + +symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, + const typet &tp) +{ + irep_idt name("string_refinement#"); + name += prefix + "#" + i2string(next_symbol_id++); + return symbol_exprt(name, tp); +} + + +typet string_refinementt::index_type() +{ + return unsignedbv_typet(string_length_width); +} + + +typet string_refinementt::char_type() +{ + return unsignedbv_typet(8); +} + + +exprt string_refinementt::make_length(const exprt &str) +{ + expr_mapt::iterator it = string2length.find(str); + if (it != string2length.end()) { + return it->second; + } + symbol_exprt len = fresh_symbol("string_length", index_type()); + string2length[str] = len; + length2string[len] = str; + return len; +} + + +exprt string_refinementt::make_array(const exprt &str) +{ + expr_mapt::iterator it = string2array.find(str); + if (it != string2array.end()) { + return it->second; + } + symbol_exprt arr = fresh_symbol("string_array", + array_typet(char_type(), nil_exprt())); + // TODO - is nil ok here for size? + string2array[str] = arr; + return arr; +} + + +void string_refinementt::expect(bool cond, const char *msg) +{ + assert(cond); + if (!cond) { + throw (msg ? msg : "assertion failure!"); + } +} diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 730360f1855..085860818f5 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -20,8 +20,6 @@ class string_refinementt: public bv_refinementt string_refinementt(const namespacet &_ns, propt &_prop); ~string_refinementt(); - virtual decision_proceduret::resultt dec_solve(); - virtual std::string decision_procedure_text() const { return "string refinement loop with "+prop.solver_text(); } @@ -41,27 +39,49 @@ class string_refinementt: public bv_refinementt std::string as_string() const; }; + + typedef std::vector axiom_vect; + typedef std::set expr_sett; + typedef std::map expr_mapt; + typedef std::map index_sett; - virtual void convert_symbol(const exprt &expr, bvt &bv); - virtual void convert_struct(const struct_exprt &expr, bvt &bv); - virtual void convert_function_application( - const function_application_exprt &expr, bvt &bv); - virtual void set_to(const exprt &expr, bool value); + virtual void post_process(); + virtual bvt convert_symbol(const exprt &expr); + virtual bvt convert_struct(const struct_exprt &expr); + virtual bvt convert_function_application( + const function_application_exprt &expr); virtual void check_SAT(); bool is_string_type(const typet &type); bool is_char_type(const typet &type); + + bvt convert_bool_bv(const exprt &boole, const exprt &orig); - void convert_string_equal(const function_application_exprt &f, bvt &bv); - void convert_string_length(const function_application_exprt &f, bvt &bv); - void convert_string_concat(const function_application_exprt &f, bvt &bv); - void convert_string_substring(const function_application_exprt &f, bvt &bv); - void convert_string_is_prefix(const function_application_exprt &f, bvt &bv); - void convert_string_is_suffix(const function_application_exprt &f, bvt &bv); - void convert_string_literal(const function_application_exprt &f, bvt &bv); - void convert_char_literal(const function_application_exprt &f, bvt &bv); - void convert_string_char_at(const function_application_exprt &f, bvt &bv); - void convert_string_char_set(const function_application_exprt &f, bvt &bv); + bvt convert_string_equal(const function_application_exprt &f); + bvt convert_string_length(const function_application_exprt &f); + bvt convert_string_concat(const function_application_exprt &f); + bvt convert_string_substring(const function_application_exprt &f); + bvt convert_string_is_prefix(const function_application_exprt &f); + bvt convert_string_is_suffix(const function_application_exprt &f); + bvt convert_string_literal(const function_application_exprt &f); + bvt convert_char_literal(const function_application_exprt &f); + bvt convert_string_char_at(const function_application_exprt &f); + bvt convert_string_char_set(const function_application_exprt &f); + + void add_instantiations(); + bool check_axioms(); + void update_index_set(const exprt &formula); + exprt instantiate(const string_axiomt &axiom, const exprt &str, + const exprt &val); + + symbol_exprt fresh_symbol(const irep_idt &prefix, + const typet &tp=bool_typet()); + typet index_type(); + typet char_type(); + exprt make_array(const exprt &str); + exprt make_length(const exprt &str); + + void expect(bool cond, const char *errmsg=NULL); irep_idt string_literal_func; irep_idt char_literal_func; @@ -75,7 +95,14 @@ class string_refinementt: public bv_refinementt irep_idt string_char_set_func; size_t string_length_width; - std::vector string_axioms; + axiom_vect string_axioms; + expr_sett strings; + expr_mapt string2length; + expr_mapt length2string; + expr_mapt string2array; + expr_sett seen_instances; + index_sett index_set; + unsigned next_symbol_id; }; #endif diff --git a/src/solvers/smt2/smt2_conv.cpp b/src/solvers/smt2/smt2_conv.cpp index f924b92034d..65bfb671ccd 100644 --- a/src/solvers/smt2/smt2_conv.cpp +++ b/src/solvers/smt2/smt2_conv.cpp @@ -5295,8 +5295,9 @@ void smt2_convt::define_string_is_suffix(const function_application_exprt &f) out << "(assert (forall ((?n cprover.Pos)) " << "(=> (and " << id << " (bvult ?n (cprover.str.len " << s1id << "))) " << "(= (select " << s1id << " ?n) " - << "(select " << sid << " (bvsub (cprover.str.len " << sid << ") " - << "(bvadd ?n (cprover.str.len " << s1id << "))))))))\n"; + << "(select " << sid << " (bvadd ?n " + << "(bvsub (cprover.str.len " << sid << ") " + << "(cprover.str.len " << s1id << "))))))))\n"; irep_idt witness = "string_suffix.idx." + index; out << "(declare-fun " << witness << " () cprover.Pos)\n"; From d138195e163fe2f1a3900426bce392869b4a3e1f Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Fri, 15 Jul 2016 17:51:28 +0200 Subject: [PATCH 019/221] further work on string refinement The code now compiles, but it is not yet reachable from main (so, completely untested...) --- src/solvers/Makefile | 1 + src/solvers/flattening/boolbv.cpp | 3 +- src/solvers/refinement/string_refinement.cpp | 391 +++++++++++++++++-- src/solvers/refinement/string_refinement.h | 9 +- 4 files changed, 366 insertions(+), 38 deletions(-) diff --git a/src/solvers/Makefile b/src/solvers/Makefile index b806aa47886..44e21ddbff9 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -118,6 +118,7 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ floatbv/float_utils.cpp floatbv/float_bv.cpp \ refinement/bv_refinement_loop.cpp refinement/refine_arithmetic.cpp \ refinement/refine_arrays.cpp \ + refinement/string_refinement.cpp \ miniBDD/miniBDD.cpp INCLUDES= -I .. \ diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index b5b2c393677..c41d8440d6c 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -334,8 +334,7 @@ bvt boolbvt::convert_bitvector(const exprt &expr) } else if(expr.id()==ID_function_application) { - return convert_function_application(to_function_application_expr(expr), bv); - return prop.new_variables(boolbv_width(expr.type())); + return convert_function_application(to_function_application_expr(expr)); } else if(expr.id()==ID_reduction_or || expr.id()==ID_reduction_and || expr.id()==ID_reduction_nor || expr.id()==ID_reduction_nand || diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 5912e042d0a..1d8636607e9 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -8,6 +8,12 @@ Author: Alberto Griggio, alberto.griggio@gmail.com \*******************************************************************/ #include +#include +#include +#include +#include +#include + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) @@ -50,7 +56,7 @@ void string_refinementt::post_process() } } - add_instantiations(); + add_instantiations(true); } @@ -182,14 +188,14 @@ bvt string_refinementt::convert_string_equal( exprt s2len = make_length(s2); implies_exprt lemma1(eq, equal_exprt(s1len, s2len)); - prop.l_set_to_true(convert(lemma1)); + add_lemma(lemma1); string_axiomt a(string_axioms.size()); a.idx = witness; - a.lit = bv[0]; + a.lit = eq; exprt s1arr = make_array(s1); exprt s2arr = make_array(s2); - a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.premise = and_exprt(eq, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt(index_exprt(s1arr, witness), index_exprt(s2arr, witness)); string_axioms.push_back(a); @@ -200,7 +206,7 @@ bvt string_refinementt::convert_string_equal( and_exprt(binary_relation_exprt(witness, ID_lt, s1len), notequal_exprt(index_exprt(s1arr, witness), index_exprt(s2arr, witness))))); - prop.l_set_to_true(convert(lemma2)); + add_lemma(lemma2); return bv; } @@ -213,7 +219,7 @@ bvt string_refinementt::convert_string_length( const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "bad args to string length"); - expr len = make_length(args[0]); + exprt len = make_length(args[0]); bv = convert_bv(len); return bv; } @@ -240,19 +246,19 @@ bvt string_refinementt::convert_string_concat( exprt s2arr = make_array(s2); equal_exprt lemma1(len, plus_exprt(s1len, s2len)); - prop.l_set_to_true(convert(lemma1)); + add_lemma(lemma1); binary_relation_exprt lemma2(len, ID_ge, s1len); - prop.l_set_to_true(convert(lemma2)); + add_lemma(lemma2); binary_relation_exprt lemma3(len, ID_ge, s2len); - prop.l_set_to_true(convert(lemma3)); + add_lemma(lemma3); symbol_exprt idx = fresh_symbol("index", index_type()); string_axiomt a1(string_axioms.size()); a1.idx = idx; - a1.lit = literalt(); + a1.lit = nil_exprt(); a1.premise = binary_relation_exprt(idx, ID_lt, s1len); a1.body = equal_exprt(index_exprt(s1arr, idx), index_exprt(arr, idx)); @@ -260,7 +266,7 @@ bvt string_refinementt::convert_string_concat( string_axiomt a2(string_axioms.size()); a2.idx = idx; - a2.lit = literalt(); + a2.lit = nil_exprt(); a2.premise = binary_relation_exprt(idx, ID_lt, s2len); a2.body = equal_exprt(index_exprt(s2arr, idx), index_exprt(arr, plus_exprt(s1len, idx))); @@ -291,7 +297,7 @@ bvt string_refinementt::convert_string_substring( string_axiomt a(string_axioms.size()); a.idx = idx; - a.lit = literalt(); + a.lit = nil_exprt(); a.premise = binary_relation_exprt(idx, ID_lt, len); a.body = equal_exprt(index_exprt(arr, idx), index_exprt(sarr, plus_exprt(i, idx))); @@ -300,10 +306,10 @@ bvt string_refinementt::convert_string_substring( and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), and_exprt(binary_relation_exprt(j, ID_le, slen), equal_exprt(len, minus_exprt(j, i)))); - prop.l_set_to_true(convert(lemma1)); + add_lemma(lemma1); binary_relation_exprt lemma2(slen, ID_ge, len); - prop.l_set_to_true(convert(lemma2)); + add_lemma(lemma2); return bv; } @@ -325,14 +331,14 @@ bvt string_refinementt::convert_string_is_prefix( exprt s1arr = make_array(args[1]); implies_exprt lemma1(isprefix, binary_relation_exprt(slen, ID_ge, s1len)); - prop.l_set_to_true(convert(lemma1)); + add_lemma(lemma1); symbol_exprt witness = fresh_symbol("index", index_type()); string_axiomt a(string_axioms.size()); a.idx = witness; - a.lit = bv[0]; - a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.lit = isprefix; + a.premise = and_exprt(isprefix, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt(index_exprt(s1arr, witness), index_exprt(sarr, witness)); string_axioms.push_back(a); @@ -343,7 +349,7 @@ bvt string_refinementt::convert_string_is_prefix( and_exprt(binary_relation_exprt(witness, ID_lt, s1len), notequal_exprt(index_exprt(s1arr, witness), index_exprt(sarr, witness))))); - prop.l_set_to_true(convert(lemma2)); + add_lemma(lemma2); return bv; } @@ -364,15 +370,15 @@ bvt string_refinementt::convert_string_is_suffix( exprt s1len = make_length(args[1]); exprt s1arr = make_array(args[1]); - implies_exprt lemma1(isprefix, binary_relation_exprt(slen, ID_ge, s1len)); - prop.l_set_to_true(convert(lemma1)); + implies_exprt lemma1(issuffix, binary_relation_exprt(slen, ID_ge, s1len)); + add_lemma(lemma1); symbol_exprt witness = fresh_symbol("index", index_type()); string_axiomt a(string_axioms.size()); a.idx = witness; - a.lit = bv[0]; - a.premise = binary_relation_exprt(witness, ID_lt, s1len); + a.lit = issuffix; + a.premise = and_exprt(issuffix, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt( index_exprt(s1arr, witness), index_exprt(sarr, @@ -380,7 +386,7 @@ bvt string_refinementt::convert_string_is_suffix( string_axioms.push_back(a); implies_exprt lemma2( - not_exprt(isprefix), + not_exprt(issuffix), or_exprt(not_exprt(binary_relation_exprt(slen, ID_ge, s1len)), and_exprt(binary_relation_exprt(witness, ID_lt, s1len), notequal_exprt( @@ -388,7 +394,7 @@ bvt string_refinementt::convert_string_is_suffix( index_exprt(sarr, plus_exprt(witness, minus_exprt(slen, s1len))))))); - prop.l_set_to_true(convert(lemma2)); + add_lemma(lemma2); return bv; } @@ -415,11 +421,11 @@ bvt string_refinementt::convert_string_literal( constant_exprt idx(i2string(i), index_type()); constant_exprt c(i2string(int(sval[i])), char_type()); equal_exprt lemma(index_exprt(arr, idx), c); - prop.l_set_to_true(convert(lemma)); + add_lemma(lemma); } exprt len = make_length(f); - equal_exprt lemma(len, constant_exprt(sval.size(), index_type())); - prop.l_set_to_true(convert(lemma)); + equal_exprt lemma(len, constant_exprt(i2string(sval.size()), index_type())); + add_lemma(lemma); } else { expect(false, "bad arg to string literal"); } @@ -444,7 +450,7 @@ bvt string_refinementt::convert_char_literal( irep_idt sval = to_string_constant(s).get_value(); expect(sval.size() == 1, "bad literal in char literal"); - bv = convert_bv(constant_exprt(int(sval[0]), char_type())); + bv = convert_bv(constant_exprt(i2string(int(sval[0])), char_type())); } else { expect(false, "char literal"); } @@ -493,39 +499,335 @@ bvt string_refinementt::convert_string_char_set( implies_exprt lemma(binary_relation_exprt(idx, ID_lt, slen), and_exprt(equal_exprt(arr, update_exprt(sarr, idx, c)), equal_exprt(len, slen))); - prop.l_set_to_true(convert(lemma)); + add_lemma(lemma); return bv; } -void string_refinementt::add_instantiations() +void string_refinementt::add_lemma(const exprt &lemma) +{ + prop.l_set_to_true(convert(lemma)); + cur.push_back(lemma); +} + + +void string_refinementt::add_instantiations(bool first) { + if (first) { + for (size_t i = 0; i < string_axioms.size(); ++i) { + update_index_set(string_axioms[i]); + } + } + for (size_t i = 0; i < cur.size(); ++i) { + update_index_set(cur[i]); + } + + cur.clear(); + + for (index_sett::iterator i = index_set.begin(), end = index_set.end(); + i != end; ++i) { + const exprt &s = i->first; + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) { + const exprt &val = *j; + for (size_t k = 0; k < string_axioms.size(); ++k) { + exprt lemma = instantiate(string_axioms[k], s, val); + if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { + add_lemma(lemma); + } + } + } + } } bool string_refinementt::check_axioms() { + // build the interpretation from the model of the prop_solver + replace_mapt fmodel; + for (expr_mapt::iterator it = string2length.begin(), + end = string2length.end(); it != end; ++it) { + const exprt &s = it->first; + const exprt &l = it->second; + expr_mapt::iterator j = string2array.find(s); + assert(j != string2array.end()); + const exprt &a = j->second; + + exprt len = get(l); + exprt arr = get_array(a, len); + fmodel[l] = len; + fmodel[a] = arr; + } + + std::vector< std::pair > violated; + + for (size_t i = 0; i < string_axioms.size(); ++i) { + const string_axiomt &axiom = string_axioms[i]; + if (axiom.lit.is_not_nil()) { + exprt lit = get(axiom.lit); + fmodel[axiom.lit] = lit; + } + + exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); + replace_expr(fmodel, negaxiom); + + satcheck_no_simplifiert sat_check; + SUB solver(ns, sat_check); + solver << negaxiom; + + switch (solver()) { + case decision_proceduret::D_SATISFIABLE: { + exprt val = solver.get(axiom.idx); + violated.push_back(std::make_pair(i, val)); + } break; + case decision_proceduret::D_UNSATISFIABLE: + break; + default: + expect(false, "failure in checking axiom"); + } + } + + if (violated.empty()) { + return true; + } + + for (size_t i = 0; i < violated.size(); ++i) { + const exprt &val = violated[i].second; + const string_axiomt &axiom = string_axioms[violated[i].first]; + exprt premise(axiom.premise); + exprt body(axiom.body); + replace_expr(axiom.idx, val, premise); + replace_expr(axiom.idx, val, body); + implies_exprt instance(premise, body); + if (seen_instances.insert(instance).second) { + add_lemma(instance); + } + // TODO - add backwards instantiations + } + return false; } +namespace { + +void get_bounds(const exprt &qvar, const exprt &expr, std::vector &out) +{ + if (expr.id() == ID_lt && expr.op0() == qvar) { + const exprt &b = expr.op1(); + constant_exprt one("1", b.type()); + out.push_back(minus_exprt(b, one)); + } else if (expr.id() == ID_le && expr.op0() == qvar) { + out.push_back(expr.op1()); + } else { + forall_operands(it, expr) { + get_bounds(qvar, *it, out); + } + } +} + + +struct stop_visit {}; + +class find_index_visitor: public const_expr_visitort { +public: + find_index_visitor(const exprt &str): + str_(str) + { + idx = nil_exprt(); + } + + void operator()(const exprt &expr) + { + if (expr.id() == ID_index) { + const index_exprt &i = to_index_expr(expr); + if (i.array() == str_) { + idx = i.index(); + throw stop_visit(); + } + } + } + + const exprt &str_; + exprt idx; +}; + + +class find_qvar_visitor: public const_expr_visitort { +public: + find_qvar_visitor(const exprt &qvar): + qvar_(qvar), found(false) {} + + void operator()(const exprt &expr) + { + if (expr == qvar_) { + found = true; + throw stop_visit(); + } + } + + const exprt &qvar_; + bool found; +}; + + +exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) +{ + std::vector< std::pair > to_process, elems; + to_process.push_back(std::make_pair(f, true)); + + while (!to_process.empty()) { + exprt cur = to_process.back().first; + bool positive = to_process.back().second; + to_process.pop_back(); + + if (cur.id() == ID_plus) { + to_process.push_back(std::make_pair(cur.op1(), positive)); + to_process.push_back(std::make_pair(cur.op0(), positive)); + } else if (cur.id() == ID_minus) { + to_process.push_back(std::make_pair(cur.op1(), !positive)); + to_process.push_back(std::make_pair(cur.op0(), positive)); + } else if (cur.id() == ID_unary_minus) { + to_process.push_back(std::make_pair(cur.op0(), !positive)); + } else { + elems.push_back(std::make_pair(cur, positive)); + } + } + + exprt ret = nil_exprt(); + bool neg = false; + bool found = false; + + for (size_t i = 0; i < elems.size(); ++i) { + exprt &t = elems[i].first; + if (t == qvar) { + assert(!found); + found = true; + neg = !elems[i].second; + } else { + if (!elems[i].second) { + t = unary_minus_exprt(t); + } + if (ret.is_nil()) { + ret = t; + } else { + ret = plus_exprt(ret, t); + } + } + } + + assert(found); + if (ret.is_nil()) { + ret = minus_exprt(val, ret); + } else { + ret = val; + } + + if (neg) { + ret = unary_minus_exprt(ret); + } + + return ret; +} + +} // namespace + + +void string_refinementt::update_index_set(const string_axiomt &axiom) +{ + std::vector bounds; + get_bounds(axiom.idx, axiom.premise, bounds); + + std::vector to_process; + to_process.push_back(axiom.body); + + while (!to_process.empty()) { + exprt cur = to_process.back(); + to_process.pop_back(); + if (cur.id() == ID_index) { + const exprt &s = cur.op0(); + const exprt &i = cur.op1(); + + find_qvar_visitor v(axiom.idx); + try { + i.visit(v); + } catch (stop_visit &) {} + if (!v.found) { + expr_sett &idxs = index_set[s]; + idxs.insert(bounds.begin(), bounds.end()); + idxs.insert(i); + } + } else { + forall_operands(it, cur) { + to_process.push_back(*it); + } + } + } +} + + void string_refinementt::update_index_set(const exprt &formula) { + std::vector to_process; + to_process.push_back(formula); + + while (!to_process.empty()) { + exprt cur = to_process.back(); + to_process.pop_back(); + if (cur.id() == ID_index) { + const exprt &s = cur.op0(); + const exprt &i = cur.op1(); + + index_set[s].insert(i); + } else { + forall_operands(it, cur) { + to_process.push_back(*it); + } + } + } } exprt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { + find_index_visitor v1(str); + try { + axiom.body.visit(v1); + } catch (stop_visit &) {} + + if (v1.idx.is_nil()) { + return nil_exprt(); + } + + find_qvar_visitor v2(axiom.idx); + try { + v1.idx.visit(v2); + } catch (stop_visit &) {} + + if (!v2.found) { + return nil_exprt(); + } + + exprt r = compute_subst(axiom.idx, val, v1.idx); + exprt premise(axiom.premise); + replace_expr(axiom.idx, r, premise); + exprt body(axiom.body); + replace_expr(axiom.idx, r, body); + implies_exprt instance(premise, body); + + return instance; } symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, const typet &tp) { - irep_idt name("string_refinement#"); - name += prefix + "#" + i2string(next_symbol_id++); + std::ostringstream buf; + buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); + std::string s = buf.str(); + irep_idt name(s.c_str()); return symbol_exprt(name, tp); } @@ -562,13 +864,34 @@ exprt string_refinementt::make_array(const exprt &str) return it->second; } symbol_exprt arr = fresh_symbol("string_array", - array_typet(char_type(), nil_exprt())); - // TODO - is nil ok here for size? + array_typet(char_type(), + infinity_exprt(integer_typet()))); string2array[str] = arr; return arr; } +exprt string_refinementt::get_array(const exprt &arr, const exprt &size) +{ + exprt val = get(arr); + expect(val.id() == "array-list", "unable to get array-list value"); + + exprt ret = + array_of_exprt(to_unsignedbv_type(char_type()).zero_expr(), + array_typet(char_type(), size)); + + for (size_t i = 0; i < val.operands().size()/2; ++i) { + exprt tmp_index = val.operands()[i*2]; + typecast_exprt idx(tmp_index, index_type()); + exprt tmp_value = val.operands()[i*2+1]; + typecast_exprt value(tmp_value, char_type()); + ret = update_exprt(ret, idx, value); + } + + return ret; +} + + void string_refinementt::expect(bool cond, const char *msg) { assert(cond); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 085860818f5..c3d541725e3 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -32,7 +32,7 @@ class string_refinementt: public bv_refinementt explicit string_axiomt(unsigned i=0): id_nr(i) {} unsigned id_nr; - literalt lit; + exprt lit; exprt idx; exprt premise; exprt body; @@ -68,11 +68,13 @@ class string_refinementt: public bv_refinementt bvt convert_string_char_at(const function_application_exprt &f); bvt convert_string_char_set(const function_application_exprt &f); - void add_instantiations(); + void add_instantiations(bool first=false); bool check_axioms(); void update_index_set(const exprt &formula); + void update_index_set(const string_axiomt &axiom); exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); + void add_lemma(const exprt &lemma); symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); @@ -80,6 +82,7 @@ class string_refinementt: public bv_refinementt typet char_type(); exprt make_array(const exprt &str); exprt make_length(const exprt &str); + exprt get_array(const exprt &arr, const exprt &size); void expect(bool cond, const char *errmsg=NULL); @@ -103,6 +106,8 @@ class string_refinementt: public bv_refinementt expr_sett seen_instances; index_sett index_set; unsigned next_symbol_id; + + std::vector cur; }; #endif From 4abb6d6004b5b1771ffc3e8e8c43c556b4e541e4 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Mon, 1 Aug 2016 14:56:17 +0200 Subject: [PATCH 020/221] continued working on string refinement loop unfortunately, this is still broken --- regression/strings/test1/test.c | 5 +- src/cbmc/cbmc_parse_options.cpp | 9 +++ src/cbmc/cbmc_parse_options.h | 1 + src/cbmc/cbmc_solvers.cpp | 45 +++++++++++++ src/cbmc/cbmc_solvers.h | 3 + src/solvers/refinement/string_refinement.cpp | 67 +++++++++++++++++--- src/solvers/refinement/string_refinement.h | 5 +- 7 files changed, 124 insertions(+), 11 deletions(-) diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c index d73324f8ef4..104aac0d377 100644 --- a/regression/strings/test1/test.c +++ b/regression/strings/test1/test.c @@ -5,11 +5,14 @@ int main() { __CPROVER_string s; + __CPROVER_char c1, c2; int i; int j; i = 2; s = __CPROVER_string_literal("pippo"); - if (__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")) { + c1 = __CPROVER_char_at(s, i); + c2 = __CPROVER_char_literal("p"); + if (c1 == c2) { j = 1; } assert(j == 1); diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 9b47a7b1891..be2a23aba18 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -333,6 +333,14 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("refine-arithmetic", true); } + if (cmdline.isset("strings")) + { + options.set_option("strings", true); + options.set_option("refine-arrays", true); + options.set_option("arrays-uf-always", true); + options.set_option("propagation", false); + } + if(cmdline.isset("max-node-refinement")) options.set_option("max-node-refinement", cmdline.get_value("max-node-refinement")); @@ -1169,6 +1177,7 @@ void cbmc_parse_optionst::help() " --outfile filename output formula to given file\n" " --arrays-uf-never never turn arrays into uninterpreted functions\n" " --arrays-uf-always always turn arrays into uninterpreted functions\n" + " --strings enable support for strings (experimental)\n" "\n" "Other options:\n" " --version show version and exit\n" diff --git a/src/cbmc/cbmc_parse_options.h b/src/cbmc/cbmc_parse_options.h index 6588a2067fb..7252326e372 100644 --- a/src/cbmc/cbmc_parse_options.h +++ b/src/cbmc/cbmc_parse_options.h @@ -37,6 +37,7 @@ class optionst; "(no-pretty-names)(beautify)" \ "(fixedbv)" \ "(dimacs)(refine)(max-node-refinement):(refine-arrays)(refine-arithmetic)(aig)" \ + "(strings)" \ "(16)(32)(64)(LP64)(ILP64)(LLP64)(ILP32)(LP32)" \ "(little-endian)(big-endian)" \ "(show-goto-functions)(show-loops)" \ diff --git a/src/cbmc/cbmc_solvers.cpp b/src/cbmc/cbmc_solvers.cpp index 319b60fe08b..f0b1f86570f 100644 --- a/src/cbmc/cbmc_solvers.cpp +++ b/src/cbmc/cbmc_solvers.cpp @@ -14,6 +14,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include +#include #include #include #include @@ -322,6 +323,50 @@ cbmc_solverst::solvert* cbmc_solverst::get_bv_refinement() return new cbmc_solver_with_propt(bv_refinement, prop); } + +/*******************************************************************\ + +Function: cbmc_solverst::get_string_refinement + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +cbmc_solverst::solvert* cbmc_solverst::get_string_refinement() +{ + propt *prop; + + // We offer the option to disable the SAT preprocessor + if(options.get_bool_option("sat-preprocessor")) + { + no_beautification(); + prop=new satcheckt(); + } + else + prop=new satcheck_no_simplifiert(); + + prop->set_message_handler(get_message_handler()); + + string_refinementt *string_refinement = new string_refinementt(ns, *prop); + string_refinement->set_ui(ui); + + // we allow setting some parameters + if(options.get_option("max-node-refinement")!="") + string_refinement->max_node_refinement = + options.get_unsigned_int_option("max-node-refinement"); + + string_refinement->do_array_refinement = + options.get_bool_option("refine-arrays"); + string_refinement->do_arithmetic_refinement = + options.get_bool_option("refine-arithmetic"); + + return new cbmc_solver_with_propt(string_refinement, prop); +} + /*******************************************************************\ Function: cbmc_solverst::get_smt1 diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index e121b8fa2af..6b1c4cc24c3 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -84,6 +84,8 @@ class cbmc_solverst:public messaget solver = get_dimacs(); else if(options.get_bool_option("refine")) solver = get_bv_refinement(); + else if(options.get_bool_option("strings")) + solver = get_string_refinement(); else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); else if(options.get_bool_option("smt2")) @@ -111,6 +113,7 @@ class cbmc_solverst:public messaget solvert* get_default(); solvert* get_dimacs(); solvert* get_bv_refinement(); + solvert* get_string_refinement(); solvert* get_smt1(smt1_dect::solvert solver); solvert* get_smt2(smt2_dect::solvert solver); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 1d8636607e9..dc31375358b 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -30,6 +30,8 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_char_set_func = "__CPROVER_uninterpreted_char_set"; string_length_width = 32; // TODO! next_symbol_id = 1; + + equality_propagation = false; } @@ -40,6 +42,10 @@ string_refinementt::~string_refinementt() void string_refinementt::post_process() { + for (size_t i = 0; i < cur.size(); ++i) { + set_to_true(cur[i]); + } + // Ackermann expansion for string lengths for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); i != end; ++i) { @@ -52,11 +58,27 @@ void string_refinementt::post_process() exprt lenj = j->second; implies_exprt lemma(equal_exprt(si, sj), equal_exprt(leni, lenj)); - prop.l_set_to_true(convert(lemma)); + //prop.l_set_to_true(convert(lemma)); + set_to_true(lemma); } } add_instantiations(true); + + SUB::post_process(); +} + + +bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) +{ + if (!is_string_type(expr.lhs().type())) { + return SUB::boolbv_set_equality_to_true(expr); + } + convert(expr); + exprt a = make_array(expr.lhs()); + exprt b = make_array(expr.rhs()); + prop.l_set_to_true(record_array_equality(equal_exprt(a, b))); + return false; } @@ -418,13 +440,13 @@ bvt string_refinementt::convert_string_literal( bv = convert_bv(arr); for (std::size_t i = 0; i < sval.size(); ++i) { - constant_exprt idx(i2string(i), index_type()); - constant_exprt c(i2string(int(sval[i])), char_type()); + constant_exprt idx(i2idx(i), index_type()); + constant_exprt c(i2chr(int(sval[i])), char_type()); equal_exprt lemma(index_exprt(arr, idx), c); add_lemma(lemma); } exprt len = make_length(f); - equal_exprt lemma(len, constant_exprt(i2string(sval.size()), index_type())); + equal_exprt lemma(len, constant_exprt(i2idx(sval.size()), index_type())); add_lemma(lemma); } else { expect(false, "bad arg to string literal"); @@ -450,7 +472,7 @@ bvt string_refinementt::convert_char_literal( irep_idt sval = to_string_constant(s).get_value(); expect(sval.size() == 1, "bad literal in char literal"); - bv = convert_bv(constant_exprt(i2string(int(sval[0])), char_type())); + bv = convert_bv(constant_exprt(i2chr(int(sval[0])), char_type())); } else { expect(false, "char literal"); } @@ -505,10 +527,13 @@ bvt string_refinementt::convert_string_char_set( } -void string_refinementt::add_lemma(const exprt &lemma) +void string_refinementt::add_lemma(const exprt &lemma, bool immediately) { - prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); + if (immediately) { + //prop.l_set_to_true(convert(lemma)); + set_to_true(lemma); + } } @@ -534,7 +559,7 @@ void string_refinementt::add_instantiations(bool first) for (size_t k = 0; k < string_axioms.size(); ++k) { exprt lemma = instantiate(string_axioms[k], s, val); if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { - add_lemma(lemma); + add_lemma(lemma, true); } } } @@ -601,7 +626,7 @@ bool string_refinementt::check_axioms() replace_expr(axiom.idx, val, body); implies_exprt instance(premise, body); if (seen_instances.insert(instance).second) { - add_lemma(instance); + add_lemma(instance, true); } // TODO - add backwards instantiations } @@ -612,6 +637,18 @@ bool string_refinementt::check_axioms() namespace { +template std::string i2bin(T n, size_t w) +{ + size_t r(n); + std::string ret(w, '0'); + for (size_t i = 0; i < w; ++i) { + if (r & (size_t(1) << i)) { + ret[i] = '1'; + } + } + return ret; +} + void get_bounds(const exprt &qvar, const exprt &expr, std::vector &out) { if (expr.id() == ID_lt && expr.op0() == qvar) { @@ -832,6 +869,18 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, } +std::string string_refinementt::i2idx(size_t n) +{ + return i2bin(n, string_length_width); +} + + +std::string string_refinementt::i2chr(int n) +{ + return i2bin(n, 8); +} + + typet string_refinementt::index_type() { return unsignedbv_typet(string_length_width); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index c3d541725e3..f6f1fea534f 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -55,6 +55,7 @@ class string_refinementt: public bv_refinementt bool is_string_type(const typet &type); bool is_char_type(const typet &type); + bool boolbv_set_equality_to_true(const equal_exprt &expr); bvt convert_bool_bv(const exprt &boole, const exprt &orig); bvt convert_string_equal(const function_application_exprt &f); @@ -74,10 +75,12 @@ class string_refinementt: public bv_refinementt void update_index_set(const string_axiomt &axiom); exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); - void add_lemma(const exprt &lemma); + void add_lemma(const exprt &lemma, bool immediately=false); symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); + std::string i2idx(size_t n); + std::string i2chr(int n); typet index_type(); typet char_type(); exprt make_array(const exprt &str); From 06eccb47b63c8119c0afa9c7e71241274a4004c6 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Tue, 2 Aug 2016 10:13:09 +0200 Subject: [PATCH 021/221] string refinement: fixed bug in i2bin --- src/solvers/refinement/string_refinement.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index dc31375358b..ae64c105bfd 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -30,8 +30,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_char_set_func = "__CPROVER_uninterpreted_char_set"; string_length_width = 32; // TODO! next_symbol_id = 1; - - equality_propagation = false; } @@ -77,7 +75,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) convert(expr); exprt a = make_array(expr.lhs()); exprt b = make_array(expr.rhs()); - prop.l_set_to_true(record_array_equality(equal_exprt(a, b))); + equal_exprt e(a, b); + prop.l_set_to_true(record_array_equality(e)); return false; } @@ -643,7 +642,7 @@ template std::string i2bin(T n, size_t w) std::string ret(w, '0'); for (size_t i = 0; i < w; ++i) { if (r & (size_t(1) << i)) { - ret[i] = '1'; + ret[(w-1) - i] = '1'; } } return ret; From 7ce74e83256f5bde710b45de928db42b862e4ab2 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Tue, 2 Aug 2016 10:31:42 +0200 Subject: [PATCH 022/221] string refinement: fixed processing of command-line args --- src/cbmc/cbmc_parse_options.cpp | 2 -- src/cbmc/cbmc_solvers.h | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index be2a23aba18..dae46a38cf1 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -337,8 +337,6 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) { options.set_option("strings", true); options.set_option("refine-arrays", true); - options.set_option("arrays-uf-always", true); - options.set_option("propagation", false); } if(cmdline.isset("max-node-refinement")) diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index 6b1c4cc24c3..301e568ab62 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -82,10 +82,10 @@ class cbmc_solverst:public messaget if(options.get_bool_option("dimacs")) solver = get_dimacs(); - else if(options.get_bool_option("refine")) - solver = get_bv_refinement(); else if(options.get_bool_option("strings")) solver = get_string_refinement(); + else if(options.get_bool_option("refine")) + solver = get_bv_refinement(); else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); else if(options.get_bool_option("smt2")) From 64ae282e8cf246409f9b4a357a10d53577e9f167 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Tue, 2 Aug 2016 11:18:19 +0200 Subject: [PATCH 023/221] string refinement: added missing conversions, fixed bug in axiom instantiation --- src/solvers/refinement/string_refinement.cpp | 26 ++++++++++++++++++-- src/solvers/refinement/string_refinement.h | 1 + 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ae64c105bfd..2bb24dbe12c 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -81,6 +81,29 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) } +literalt string_refinementt::convert_rest(const exprt &expr) +{ + if (expr.id() == ID_function_application) { + function_application_exprt f = to_function_application_expr(expr); + const exprt &name = f.function(); + + // check if this is something we recognize + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + if (id == string_equal_func) { + return convert_string_equal(f)[0]; + } else if (id == string_is_prefix_func) { + return convert_string_is_prefix(f)[0]; + } else if (id == string_is_suffix_func) { + return convert_string_is_suffix(f)[0]; + } + } + } + + return SUB::convert_rest(expr); +} + + bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); @@ -116,7 +139,6 @@ bvt string_refinementt::convert_function_application( const function_application_exprt &expr) { const exprt &name = expr.function(); - bool ok = false; // check if this is something we recognize if (name.id() == ID_symbol) { @@ -754,7 +776,7 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } assert(found); - if (ret.is_nil()) { + if (!ret.is_nil()) { ret = minus_exprt(val, ret); } else { ret = val; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index f6f1fea534f..03b1446081a 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -50,6 +50,7 @@ class string_refinementt: public bv_refinementt virtual bvt convert_struct(const struct_exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); + virtual literalt convert_rest(const exprt &expr); virtual void check_SAT(); bool is_string_type(const typet &type); From 6afcf55a450daacb7b443359aa18b014cf51a5c8 Mon Sep 17 00:00:00 2001 From: Alberto Griggio Date: Tue, 2 Aug 2016 16:15:58 +0200 Subject: [PATCH 024/221] string refinement: further progress. Now something works, but checking for axiom violations is still broken (don't know why though) --- regression/strings/test3.2/test.c | 2 ++ src/cbmc/cbmc_solvers.cpp | 17 ++++++------ src/solvers/refinement/string_refinement.cpp | 29 ++++++++++++++++---- 3 files changed, 34 insertions(+), 14 deletions(-) diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c index 9ef91e77d8a..c3e45997a48 100644 --- a/regression/strings/test3.2/test.c +++ b/regression/strings/test3.2/test.c @@ -7,6 +7,8 @@ int main() __CPROVER_string s, s2, s3; int i; + __CPROVER_assume(i < 10); + s = __CPROVER_string_concat(s2, s3); __CPROVER_assume(__CPROVER_string_length(s2) == i); __CPROVER_assume( diff --git a/src/cbmc/cbmc_solvers.cpp b/src/cbmc/cbmc_solvers.cpp index f0b1f86570f..b581dce6c2e 100644 --- a/src/cbmc/cbmc_solvers.cpp +++ b/src/cbmc/cbmc_solvers.cpp @@ -340,14 +340,15 @@ cbmc_solverst::solvert* cbmc_solverst::get_string_refinement() { propt *prop; - // We offer the option to disable the SAT preprocessor - if(options.get_bool_option("sat-preprocessor")) - { - no_beautification(); - prop=new satcheckt(); - } - else - prop=new satcheck_no_simplifiert(); + // // We offer the option to disable the SAT preprocessor + // if(0 && options.get_bool_option("sat-preprocessor")) + // { + // no_beautification(); + // prop=new satcheckt(); + // } + // else + // TODO + prop=new satcheck_no_simplifiert(); prop->set_message_handler(get_message_handler()); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 2bb24dbe12c..bc208c5c56c 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -11,6 +11,7 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include #include +#include #include #include @@ -539,8 +540,9 @@ bvt string_refinementt::convert_string_char_set( prop.set_equal(bva[i], bvc[i]); } + with_exprt sarrnew(sarr, idx, c); implies_exprt lemma(binary_relation_exprt(idx, ID_lt, slen), - and_exprt(equal_exprt(arr, update_exprt(sarr, idx, c)), + and_exprt(equal_exprt(arr, sarrnew), equal_exprt(len, slen))); add_lemma(lemma); @@ -570,6 +572,7 @@ void string_refinementt::add_instantiations(bool first) } cur.clear(); + size_t added = 0; for (index_sett::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { @@ -581,10 +584,14 @@ void string_refinementt::add_instantiations(bool first) exprt lemma = instantiate(string_axioms[k], s, val); if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { add_lemma(lemma, true); + ++added; } } } } + + status() << "string-refinement: added " << added << " axiom instances" + << eom; } @@ -617,6 +624,7 @@ bool string_refinementt::check_axioms() exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); +// negaxiom = simplify_expr(negaxiom, ns); satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); @@ -635,11 +643,15 @@ bool string_refinementt::check_axioms() } if (violated.empty()) { + status() << "string-refinement: no axiom violation found" << eom; return true; } for (size_t i = 0; i < violated.size(); ++i) { const exprt &val = violated[i].second; + status() << "string-refinement: axiom " << violated[i].first + << " violated by index " + << to_constant_expr(val).get_value() << eom; const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); exprt body(axiom.body); @@ -651,6 +663,9 @@ bool string_refinementt::check_axioms() } // TODO - add backwards instantiations } + + status() << "string-refinement: found " << violated.size() + << " violated axioms" << eom; return false; } @@ -674,7 +689,8 @@ void get_bounds(const exprt &qvar, const exprt &expr, std::vector &out) { if (expr.id() == ID_lt && expr.op0() == qvar) { const exprt &b = expr.op1(); - constant_exprt one("1", b.type()); + constant_exprt one(i2bin(1, to_bitvector_type(b.type()).get_width()), + b.type()); out.push_back(minus_exprt(b, one)); } else if (expr.id() == ID_le && expr.op0() == qvar) { out.push_back(expr.op1()); @@ -808,12 +824,12 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) const exprt &i = cur.op1(); find_qvar_visitor v(axiom.idx); + expr_sett &idxs = index_set[s]; + idxs.insert(bounds.begin(), bounds.end()); try { i.visit(v); } catch (stop_visit &) {} if (!v.found) { - expr_sett &idxs = index_set[s]; - idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); } } else { @@ -948,14 +964,15 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) exprt ret = array_of_exprt(to_unsignedbv_type(char_type()).zero_expr(), - array_typet(char_type(), size)); + // array_typet(char_type(), size)); + array_typet(char_type(), infinity_exprt(integer_typet()))); for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; typecast_exprt idx(tmp_index, index_type()); exprt tmp_value = val.operands()[i*2+1]; typecast_exprt value(tmp_value, char_type()); - ret = update_exprt(ret, idx, value); + ret = with_exprt(ret, idx, value); } return ret; From ad547d25735c512ae2abf347ce274d30f9407572 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 2 Aug 2016 16:55:03 +0100 Subject: [PATCH 025/221] Adding --pass option to cbmc to use the string refinement code of Alberto --- src/cbmc/cbmc_parse_options.cpp | 37 ++-- src/cbmc/cbmc_parse_options.h | 3 +- src/cbmc/cbmc_solvers.cpp | 23 +-- src/cbmc/cbmc_solvers.h | 7 +- src/config.inc | 2 +- src/solvers/refinement/string_refinement.cpp | 199 ++++++++----------- src/solvers/refinement/string_refinement.h | 6 +- 7 files changed, 104 insertions(+), 173 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index dae46a38cf1..3761ce5e038 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -333,10 +333,9 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("refine-arithmetic", true); } - if (cmdline.isset("strings")) + if(cmdline.isset("pass")) { - options.set_option("strings", true); - options.set_option("refine-arrays", true); + options.set_option("pass", true); } if(cmdline.isset("max-node-refinement")) @@ -748,6 +747,21 @@ int cbmc_parse_optionst::get_goto_program( if(process_goto_program(options, goto_functions)) return 6; + + // show it? + if(cmdline.isset("show-loops")) + { + show_loop_ids(get_ui(), goto_functions); + return 0; + } + + // show it? + if(cmdline.isset("show-goto-functions")) + { + namespacet ns(symbol_table); + show_goto_functions(ns, get_ui(), goto_functions); + return 0; + } } catch(const char *e) @@ -967,21 +981,6 @@ bool cbmc_parse_optionst::process_goto_program( // remove skips remove_skip(goto_functions); goto_functions.update(); - - // show it? - if(cmdline.isset("show-loops")) - { - show_loop_ids(get_ui(), goto_functions); - return true; - } - - // show it? - if(cmdline.isset("show-goto-functions")) - { - namespacet ns(symbol_table); - show_goto_functions(ns, get_ui(), goto_functions); - return true; - } } catch(const char *e) @@ -1172,10 +1171,10 @@ void cbmc_parse_optionst::help() " --yices use Yices\n" " --z3 use Z3\n" " --refine use refinement procedure (experimental)\n" + " --pass use pass procedure (experimental)\n" " --outfile filename output formula to given file\n" " --arrays-uf-never never turn arrays into uninterpreted functions\n" " --arrays-uf-always always turn arrays into uninterpreted functions\n" - " --strings enable support for strings (experimental)\n" "\n" "Other options:\n" " --version show version and exit\n" diff --git a/src/cbmc/cbmc_parse_options.h b/src/cbmc/cbmc_parse_options.h index 7252326e372..a5c9a87b849 100644 --- a/src/cbmc/cbmc_parse_options.h +++ b/src/cbmc/cbmc_parse_options.h @@ -36,8 +36,7 @@ class optionst; "(no-sat-preprocessor)" \ "(no-pretty-names)(beautify)" \ "(fixedbv)" \ - "(dimacs)(refine)(max-node-refinement):(refine-arrays)(refine-arithmetic)(aig)" \ - "(strings)" \ + "(dimacs)(refine)(max-node-refinement):(refine-arrays)(refine-arithmetic)(aig)(pass)" \ "(16)(32)(64)(LP64)(ILP64)(LLP64)(ILP32)(LP32)" \ "(little-endian)(big-endian)" \ "(show-goto-functions)(show-loops)" \ diff --git a/src/cbmc/cbmc_solvers.cpp b/src/cbmc/cbmc_solvers.cpp index b581dce6c2e..f179b504b1d 100644 --- a/src/cbmc/cbmc_solvers.cpp +++ b/src/cbmc/cbmc_solvers.cpp @@ -323,7 +323,6 @@ cbmc_solverst::solvert* cbmc_solverst::get_bv_refinement() return new cbmc_solver_with_propt(bv_refinement, prop); } - /*******************************************************************\ Function: cbmc_solverst::get_string_refinement @@ -338,33 +337,13 @@ Function: cbmc_solverst::get_string_refinement cbmc_solverst::solvert* cbmc_solverst::get_string_refinement() { + std::cout << "get_string_refinement" << std::endl; propt *prop; - - // // We offer the option to disable the SAT preprocessor - // if(0 && options.get_bool_option("sat-preprocessor")) - // { - // no_beautification(); - // prop=new satcheckt(); - // } - // else - // TODO prop=new satcheck_no_simplifiert(); - prop->set_message_handler(get_message_handler()); string_refinementt *string_refinement = new string_refinementt(ns, *prop); string_refinement->set_ui(ui); - - // we allow setting some parameters - if(options.get_option("max-node-refinement")!="") - string_refinement->max_node_refinement = - options.get_unsigned_int_option("max-node-refinement"); - - string_refinement->do_array_refinement = - options.get_bool_option("refine-arrays"); - string_refinement->do_arithmetic_refinement = - options.get_bool_option("refine-arithmetic"); - return new cbmc_solver_with_propt(string_refinement, prop); } diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index 301e568ab62..cc4a48dcb30 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -79,13 +79,14 @@ class cbmc_solverst:public messaget virtual std::unique_ptr get_solver() { solvert *solver; - if(options.get_bool_option("dimacs")) solver = get_dimacs(); - else if(options.get_bool_option("strings")) - solver = get_string_refinement(); else if(options.get_bool_option("refine")) solver = get_bv_refinement(); + else if(options.get_bool_option("pass")) { + std::cout << "PASS solver" << std::endl; + solver = get_string_refinement(); + } else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); else if(options.get_bool_option("smt2")) diff --git a/src/config.inc b/src/config.inc index 2fbdf548e95..b44b06c8994 100644 --- a/src/config.inc +++ b/src/config.inc @@ -3,7 +3,7 @@ BUILD_ENV = AUTO # Variables you may want to override -#CXXFLAGS = -Wall -O0 -g -Werror -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic +CXXFLAGS = -Wall -O0 -g -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic #CXXFLAGS = -std=c++11 # If GLPK is available; this is used by goto-instrument and musketeer. diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index bc208c5c56c..2f290b67f95 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -11,14 +11,16 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include #include -#include #include #include +#include +#include string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { + debug() << "string_refinementt initialization" << endl; string_literal_func = "__CPROVER_uninterpreted_string_literal"; char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; @@ -29,7 +31,12 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; - string_length_width = 32; // TODO! + + // 32; // TODO! + string_length_width = to_bitvector_type(index_type()).get_width(); + debug() << "string_length_width : " << to_bitvector_type(index_type()).get_width() << endl; + string_length_width = string_length_width ? string_length_width : 32; + /// next_symbol_id = 1; } @@ -41,10 +48,6 @@ string_refinementt::~string_refinementt() void string_refinementt::post_process() { - for (size_t i = 0; i < cur.size(); ++i) { - set_to_true(cur[i]); - } - // Ackermann expansion for string lengths for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); i != end; ++i) { @@ -57,51 +60,11 @@ void string_refinementt::post_process() exprt lenj = j->second; implies_exprt lemma(equal_exprt(si, sj), equal_exprt(leni, lenj)); - //prop.l_set_to_true(convert(lemma)); - set_to_true(lemma); + prop.l_set_to_true(convert(lemma)); } } add_instantiations(true); - - SUB::post_process(); -} - - -bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) -{ - if (!is_string_type(expr.lhs().type())) { - return SUB::boolbv_set_equality_to_true(expr); - } - convert(expr); - exprt a = make_array(expr.lhs()); - exprt b = make_array(expr.rhs()); - equal_exprt e(a, b); - prop.l_set_to_true(record_array_equality(e)); - return false; -} - - -literalt string_refinementt::convert_rest(const exprt &expr) -{ - if (expr.id() == ID_function_application) { - function_application_exprt f = to_function_application_expr(expr); - const exprt &name = f.function(); - - // check if this is something we recognize - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (id == string_equal_func) { - return convert_string_equal(f)[0]; - } else if (id == string_is_prefix_func) { - return convert_string_is_prefix(f)[0]; - } else if (id == string_is_suffix_func) { - return convert_string_is_suffix(f)[0]; - } - } - } - - return SUB::convert_rest(expr); } @@ -144,6 +107,7 @@ bvt string_refinementt::convert_function_application( // check if this is something we recognize if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); + debug() << "string_refinement.cpp (l.112): check if this is something we recognize, id = " << id << eom; if (id == string_literal_func) { return convert_string_literal(expr); } else if (id == char_literal_func) { @@ -448,6 +412,7 @@ bvt string_refinementt::convert_string_literal( const function_application_exprt &f) { bvt bv; + size_t char_width = to_bitvector_type(char_type()).get_width(); const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "bad args to string literal"); @@ -462,18 +427,31 @@ bvt string_refinementt::convert_string_literal( bv = convert_bv(arr); for (std::size_t i = 0; i < sval.size(); ++i) { - constant_exprt idx(i2idx(i), index_type()); - constant_exprt c(i2chr(int(sval[i])), char_type()); + // This needs to be checked + std::string idx_binary = integer2binary(i,string_length_width); + constant_exprt idx(idx_binary, index_type()); + + //exprt idx = constant_exprt::integer_constant((unsigned)i); + //exprt idx=from_integer(i, index_type()); + //std::string sval_string = i2string(unsigned(sval[i])); + //sval_string.resize(char_width); + //std::cout << "constant_exprt c("<< sval_string << ", char_type());" << std::endl; + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,char_type()); equal_exprt lemma(index_exprt(arr, idx), c); + add_lemma(lemma); } + exprt len = make_length(f); - equal_exprt lemma(len, constant_exprt(i2idx(sval.size()), index_type())); + std::string sval_size_string = integer2binary(unsigned(sval.size()),string_length_width); + equal_exprt lemma(len, constant_exprt(sval_size_string, index_type())); add_lemma(lemma); } else { expect(false, "bad arg to string literal"); } + debug() << "end of string_refinementt::convert_string_literal" << eom; return bv; } @@ -483,22 +461,34 @@ bvt string_refinementt::convert_char_literal( { bvt bv; const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 1, "bad args to char literal"); + expect(args.size() == 1, "there should be exactly 1 argument to char literal"); - const exprt &arg = args[0]; - if (arg.operands().size() == 1 && - arg.operands()[0].operands().size() == 1 && - arg.operands()[0].operands()[0].operands().size() == 2 && - arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ - const exprt &s = arg.operands()[0].operands()[0].operands()[0]; - irep_idt sval = to_string_constant(s).get_value(); - expect(sval.size() == 1, "bad literal in char literal"); - - bv = convert_bv(constant_exprt(i2chr(int(sval[0])), char_type())); - } else { - expect(false, "char literal"); - } + const exprt &arg = args[0]; + expect(arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant, "argument to char literal should be one string constant"); + + const string_constantt s = to_string_constant(arg.op0().op0().op0()); + irep_idt sval = s.get_value(); + expect(sval.size() == 1, "the argument to char literal should be a string of size 1"); + + size_t char_width = boolbv_width(char_type()); + //to_bitvector_type(char_type()).get_width(); + + // this does not seem to work : + //constant_exprt e(unsigned(sval[0]), char_type()); + //bv.resize(char_width); + + // This part needs to be checked + //std::string sval_string = i2string(unsigned(sval[0])); + //sval_string.resize(char_width); + std::string binary=integer2binary(unsigned(sval[0]), char_width); + constant_exprt e(binary, char_type()); + debug() << " e = " << e.pretty() << eom; + bv = convert_bv(e); + //constant_exprt e(s, char_type()); bv = convert_bv(e); return bv; } @@ -506,9 +496,10 @@ bvt string_refinementt::convert_char_literal( bvt string_refinementt::convert_string_char_at( const function_application_exprt &f) { + debug() << "convert_string_char_at" << eom; bvt bv; const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "bad args to string_char_at"); + expect(args.size() == 2, "string_char_at expects 2 arguments"); exprt arr = make_array(args[0]); typecast_exprt pos(args[1], index_type()); @@ -540,9 +531,8 @@ bvt string_refinementt::convert_string_char_set( prop.set_equal(bva[i], bvc[i]); } - with_exprt sarrnew(sarr, idx, c); implies_exprt lemma(binary_relation_exprt(idx, ID_lt, slen), - and_exprt(equal_exprt(arr, sarrnew), + and_exprt(equal_exprt(arr, update_exprt(sarr, idx, c)), equal_exprt(len, slen))); add_lemma(lemma); @@ -550,13 +540,10 @@ bvt string_refinementt::convert_string_char_set( } -void string_refinementt::add_lemma(const exprt &lemma, bool immediately) +void string_refinementt::add_lemma(const exprt &lemma) { + prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); - if (immediately) { - //prop.l_set_to_true(convert(lemma)); - set_to_true(lemma); - } } @@ -572,7 +559,6 @@ void string_refinementt::add_instantiations(bool first) } cur.clear(); - size_t added = 0; for (index_sett::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { @@ -583,15 +569,11 @@ void string_refinementt::add_instantiations(bool first) for (size_t k = 0; k < string_axioms.size(); ++k) { exprt lemma = instantiate(string_axioms[k], s, val); if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { - add_lemma(lemma, true); - ++added; + add_lemma(lemma); } } } } - - status() << "string-refinement: added " << added << " axiom instances" - << eom; } @@ -624,7 +606,6 @@ bool string_refinementt::check_axioms() exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); -// negaxiom = simplify_expr(negaxiom, ns); satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); @@ -643,15 +624,11 @@ bool string_refinementt::check_axioms() } if (violated.empty()) { - status() << "string-refinement: no axiom violation found" << eom; return true; } for (size_t i = 0; i < violated.size(); ++i) { const exprt &val = violated[i].second; - status() << "string-refinement: axiom " << violated[i].first - << " violated by index " - << to_constant_expr(val).get_value() << eom; const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); exprt body(axiom.body); @@ -659,13 +636,10 @@ bool string_refinementt::check_axioms() replace_expr(axiom.idx, val, body); implies_exprt instance(premise, body); if (seen_instances.insert(instance).second) { - add_lemma(instance, true); + add_lemma(instance); } // TODO - add backwards instantiations } - - status() << "string-refinement: found " << violated.size() - << " violated axioms" << eom; return false; } @@ -673,24 +647,11 @@ bool string_refinementt::check_axioms() namespace { -template std::string i2bin(T n, size_t w) -{ - size_t r(n); - std::string ret(w, '0'); - for (size_t i = 0; i < w; ++i) { - if (r & (size_t(1) << i)) { - ret[(w-1) - i] = '1'; - } - } - return ret; -} - void get_bounds(const exprt &qvar, const exprt &expr, std::vector &out) { if (expr.id() == ID_lt && expr.op0() == qvar) { const exprt &b = expr.op1(); - constant_exprt one(i2bin(1, to_bitvector_type(b.type()).get_width()), - b.type()); + constant_exprt one("1", b.type()); out.push_back(minus_exprt(b, one)); } else if (expr.id() == ID_le && expr.op0() == qvar) { out.push_back(expr.op1()); @@ -745,7 +706,15 @@ class find_qvar_visitor: public const_expr_visitort { bool found; }; - + ////////////////////////////////////////////////////////// + // For expressions f of a certain form, // + // returns an expression corresponding to $f^{−1}(val)$.// + // Takes an expression containing + and − operations // + // in which qvar appears exactly once. // + // Rewrites it as a sum of qvar and elements in list // + // elems different from qvar. // + // Takes e minus the sum of the element in elems. // + ////////////////////////////////////////////////////////// exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { std::vector< std::pair > to_process, elems; @@ -792,7 +761,7 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } assert(found); - if (!ret.is_nil()) { + if (ret.is_nil()) { ret = minus_exprt(val, ret); } else { ret = val; @@ -824,12 +793,12 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) const exprt &i = cur.op1(); find_qvar_visitor v(axiom.idx); - expr_sett &idxs = index_set[s]; - idxs.insert(bounds.begin(), bounds.end()); try { i.visit(v); } catch (stop_visit &) {} if (!v.found) { + expr_sett &idxs = index_set[s]; + idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); } } else { @@ -906,18 +875,6 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, } -std::string string_refinementt::i2idx(size_t n) -{ - return i2bin(n, string_length_width); -} - - -std::string string_refinementt::i2chr(int n) -{ - return i2bin(n, 8); -} - - typet string_refinementt::index_type() { return unsignedbv_typet(string_length_width); @@ -932,6 +889,7 @@ typet string_refinementt::char_type() exprt string_refinementt::make_length(const exprt &str) { + debug() << "string_refinementt::make_length" << eom; expr_mapt::iterator it = string2length.find(str); if (it != string2length.end()) { return it->second; @@ -964,15 +922,14 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) exprt ret = array_of_exprt(to_unsignedbv_type(char_type()).zero_expr(), - // array_typet(char_type(), size)); - array_typet(char_type(), infinity_exprt(integer_typet()))); + array_typet(char_type(), size)); for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; typecast_exprt idx(tmp_index, index_type()); exprt tmp_value = val.operands()[i*2+1]; typecast_exprt value(tmp_value, char_type()); - ret = with_exprt(ret, idx, value); + ret = update_exprt(ret, idx, value); } return ret; @@ -981,8 +938,8 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) void string_refinementt::expect(bool cond, const char *msg) { - assert(cond); if (!cond) { throw (msg ? msg : "assertion failure!"); } + assert(cond); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 03b1446081a..c3d541725e3 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -50,13 +50,11 @@ class string_refinementt: public bv_refinementt virtual bvt convert_struct(const struct_exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); - virtual literalt convert_rest(const exprt &expr); virtual void check_SAT(); bool is_string_type(const typet &type); bool is_char_type(const typet &type); - bool boolbv_set_equality_to_true(const equal_exprt &expr); bvt convert_bool_bv(const exprt &boole, const exprt &orig); bvt convert_string_equal(const function_application_exprt &f); @@ -76,12 +74,10 @@ class string_refinementt: public bv_refinementt void update_index_set(const string_axiomt &axiom); exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); - void add_lemma(const exprt &lemma, bool immediately=false); + void add_lemma(const exprt &lemma); symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); - std::string i2idx(size_t n); - std::string i2chr(int n); typet index_type(); typet char_type(); exprt make_array(const exprt &str); From c864f07300a7eaa6319cfe16a2c438109d130769 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 3 Aug 2016 18:17:29 +0100 Subject: [PATCH 026/221] experimenting with another conversion to bit vectors to take the length into account --- src/solvers/flattening/boolbv_get.cpp | 6 +- src/solvers/refinement/string_refinement.cpp | 154 +++++++++++++------ src/solvers/refinement/string_refinement.h | 5 +- 3 files changed, 114 insertions(+), 51 deletions(-) diff --git a/src/solvers/flattening/boolbv_get.cpp b/src/solvers/flattening/boolbv_get.cpp index d2cd8943f57..43d813d6ff0 100644 --- a/src/solvers/flattening/boolbv_get.cpp +++ b/src/solvers/flattening/boolbv_get.cpp @@ -16,7 +16,7 @@ Author: Daniel Kroening, kroening@kroening.com #include "boolbv.h" #include "boolbv_type.h" - +#include //#define DEBUG /*******************************************************************\ @@ -390,9 +390,11 @@ exprt boolbvt::bv_get_unbounded_array(const exprt &expr) const return nil_exprt(); // get root + std::cout << "boolbv_get.cpp get root: " << number << std::endl; number=arrays.find_number(number); - assert(numbersecond; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 2f290b67f95..b8ec2e17b3e 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -14,8 +14,9 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -#include -#include +#include +//#include +//#include string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) @@ -31,13 +32,15 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; + next_symbol_id = 1; + // 32; // TODO! string_length_width = to_bitvector_type(index_type()).get_width(); debug() << "string_length_width : " << to_bitvector_type(index_type()).get_width() << endl; string_length_width = string_length_width ? string_length_width : 32; /// - next_symbol_id = 1; + } @@ -45,6 +48,16 @@ string_refinementt::~string_refinementt() { } +typet string_refinementt::index_type() +{ + return unsignedbv_typet(string_length_width); +} + + +typet string_refinementt::char_type() +{ + return unsignedbv_typet(8); +} void string_refinementt::post_process() { @@ -67,15 +80,17 @@ void string_refinementt::post_process() add_instantiations(true); } - +// Convert an expression to a bit vector bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); + debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; if (is_string_type(type)) { - bvt ret = convert_bv(make_array(expr)); make_length(expr); // ensure there is a length for this string + bvt ret = convert_bv(make_array(expr)); + debug () << "We should encode the length of the string in a bit vector, otherwise affectation does not preserve length" << eom; map.set_literals(identifier, type, ret); return ret; } else if (is_char_type(expr.type())) { @@ -227,8 +242,16 @@ bvt string_refinementt::convert_string_length( const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "bad args to string length"); - exprt len = make_length(args[0]); - bv = convert_bv(len); + debug() << "Warning: changed the behaviour of convert_string_length" << eom; + // exprt len = make_length(args[0]); + //bv = convert_bv(len); + exprt arr = make_array(args[0]); + //std::string idx_binary = integer2binary(0,string_length_width); + std::string idx_binary = integer2binary(0,8); + //constant_exprt idx(idx_binary, index_type()); + constant_exprt idx(idx_binary, char_type()); + bv = convert_bv(index_exprt(arr, idx)); + //bv = convert_constant(constant_exprt("00001010",char_type())); return bv; } @@ -418,9 +441,9 @@ bvt string_refinementt::convert_string_literal( const exprt &arg = args[0]; if (arg.operands().size() == 1 && - arg.operands()[0].operands().size() == 1 && - arg.operands()[0].operands()[0].operands().size() == 2 && - arg.operands()[0].operands()[0].operands()[0].id() == ID_string_constant){ + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant){ const exprt &s = arg.operands()[0].operands()[0].operands()[0]; irep_idt sval = to_string_constant(s).get_value(); exprt arr = make_array(f); @@ -428,7 +451,9 @@ bvt string_refinementt::convert_string_literal( for (std::size_t i = 0; i < sval.size(); ++i) { // This needs to be checked - std::string idx_binary = integer2binary(i,string_length_width); + + debug() << "Warning: we switched indexes in strings to encode the length" << eom; + std::string idx_binary = integer2binary(i+1,string_length_width); constant_exprt idx(idx_binary, index_type()); //exprt idx = constant_exprt::integer_constant((unsigned)i); @@ -444,14 +469,27 @@ bvt string_refinementt::convert_string_literal( } exprt len = make_length(f); - std::string sval_size_string = integer2binary(unsigned(sval.size()),string_length_width); - equal_exprt lemma(len, constant_exprt(sval_size_string, index_type())); + debug() << "Warning: we are limit the maximal string length to 255 in order to have a simple encoding" << eom; + + //std::string sval_size_string = integer2binary(unsigned(sval.size()),string_length_width); + std::string sval_size_string = integer2binary(unsigned(sval.size()),8); + + equal_exprt lemma1(len, constant_exprt(sval_size_string, char_type())); + add_lemma(lemma1); + + //std::string idx_binary = integer2binary(0,string_length_width); + std::string idx_binary = integer2binary(0,8); + //constant_exprt idx0(idx_binary, index_type()); + constant_exprt idx0(idx_binary, char_type()); + //equal_exprt lemma(index_exprt(arr, idx0),constant_exprt(sval_size_string, index_type())); + equal_exprt lemma(index_exprt(arr, idx0),constant_exprt(sval_size_string, char_type())); + debug() << "adding length constraint : " << arr.pretty() << " : " << idx0.pretty() << " == " << sval_size_string << eom; + add_lemma(lemma); } else { expect(false, "bad arg to string literal"); } - debug() << "end of string_refinementt::convert_string_literal" << eom; return bv; } @@ -486,9 +524,9 @@ bvt string_refinementt::convert_char_literal( //sval_string.resize(char_width); std::string binary=integer2binary(unsigned(sval[0]), char_width); constant_exprt e(binary, char_type()); - debug() << " e = " << e.pretty() << eom; bv = convert_bv(e); //constant_exprt e(s, char_type()); bv = convert_bv(e); + debug() << "converted char literal "<< binary << eom; return bv; } @@ -496,14 +534,16 @@ bvt string_refinementt::convert_char_literal( bvt string_refinementt::convert_string_char_at( const function_application_exprt &f) { - debug() << "convert_string_char_at" << eom; bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 2, "string_char_at expects 2 arguments"); + debug() << "convert_string_char_at:" << eom; exprt arr = make_array(args[0]); - typecast_exprt pos(args[1], index_type()); - bv = convert_bv(index_exprt(arr, pos)); + debug() << "[" << args[1].pretty() << "]" << eom; + //typecast_exprt pos(args[1], index_type()); + debug() << "string_refinementt::convert_string_char_at: warning: removed typecast" << eom; + bv = convert_bv(index_exprt(arr, args[1])); return bv; } @@ -576,11 +616,23 @@ void string_refinementt::add_instantiations(bool first) } } +std::ostream & print_array(std::ostream & out, const exprt &val) { + exprt e = val; + while(e.operands().size() == 3) { + exprt tmp_index = e.op1(); + exprt tmp_value = e.op2(); + out << tmp_index.get(ID_value) << "->" << ((tmp_value.get(ID_value)!="")?tmp_value.get(ID_value):tmp_value.pretty()) << " ; "; + e = e.op0(); + } + return out; +} bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver + debug() << "string_refinementt::check_axioms: build the interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; + for (expr_mapt::iterator it = string2length.begin(), end = string2length.end(); it != end; ++it) { const exprt &s = it->first; @@ -590,14 +642,19 @@ bool string_refinementt::check_axioms() const exprt &a = j->second; exprt len = get(l); + debug() << "string_refinementt::check_axioms: get_array(" << a.get(ID_identifier) << ","<< len.get(ID_value) << ")" << eom; exprt arr = get_array(a, len); fmodel[l] = len; fmodel[a] = arr; + debug() << "check_axioms adds to the model:" << a.get(ID_identifier) << " := "; + print_array(debug(), arr); + debug() << eom; } std::vector< std::pair > violated; for (size_t i = 0; i < string_axioms.size(); ++i) { + debug() << "string axiom " << i << eom; const string_axiomt &axiom = string_axioms[i]; if (axiom.lit.is_not_nil()) { exprt lit = get(axiom.lit); @@ -613,10 +670,12 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { + debug() << "satisfiable" << eom; exprt val = solver.get(axiom.idx); violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: + debug() << "unsatisfiable" << eom; break; default: expect(false, "failure in checking axiom"); @@ -624,10 +683,12 @@ bool string_refinementt::check_axioms() } if (violated.empty()) { + debug() << "no violated property" << eom; return true; } for (size_t i = 0; i < violated.size(); ++i) { + debug() << "violated " << i << eom; const exprt &val = violated[i].second; const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); @@ -717,6 +778,7 @@ class find_qvar_visitor: public const_expr_visitort { ////////////////////////////////////////////////////////// exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { + std::cout << "string_refinement::compute_subst" << std::endl ; std::vector< std::pair > to_process, elems; to_process.push_back(std::make_pair(f, true)); @@ -875,45 +937,40 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, } -typet string_refinementt::index_type() -{ - return unsignedbv_typet(string_length_width); -} - - -typet string_refinementt::char_type() -{ - return unsignedbv_typet(8); -} - - -exprt string_refinementt::make_length(const exprt &str) -{ - debug() << "string_refinementt::make_length" << eom; - expr_mapt::iterator it = string2length.find(str); - if (it != string2length.end()) { - return it->second; - } - symbol_exprt len = fresh_symbol("string_length", index_type()); - string2length[str] = len; - length2string[len] = str; - return len; -} - +// Find the symbol corresponding to an array. +// Create a fresh one if it cannot be found exprt string_refinementt::make_array(const exprt &str) { expr_mapt::iterator it = string2array.find(str); if (it != string2array.end()) { + debug() << "found in string2array" << eom; return it->second; } symbol_exprt arr = fresh_symbol("string_array", array_typet(char_type(), infinity_exprt(integer_typet()))); + + debug() << "string_refinementt::make_array(" << str.get(ID_identifier) << ") -> new symbol " << arr.get(ID_identifier) << eom; string2array[str] = arr; return arr; } +// Find the symbol corresponding to the length of an array. +// This should be integrated in make array +exprt string_refinementt::make_length(const exprt &str) +{ + debug() << "Warning: called make_length" << eom; + expr_mapt::iterator it = string2length.find(str); + if (it != string2length.end()) { + return it->second; + } + //symbol_exprt len = fresh_symbol("string_length", index_type()); + symbol_exprt len = fresh_symbol("string_length", char_type()); + string2length[str] = len; + length2string[len] = str; + return len; +} exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { @@ -924,17 +981,18 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) array_of_exprt(to_unsignedbv_type(char_type()).zero_expr(), array_typet(char_type(), size)); - for (size_t i = 0; i < val.operands().size()/2; ++i) { + for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; - typecast_exprt idx(tmp_index, index_type()); + debug() << "string_refinementt::get_array: warning: removed typecast" << eom; + //typecast_exprt idx(tmp_index, index_type()); exprt tmp_value = val.operands()[i*2+1]; - typecast_exprt value(tmp_value, char_type()); - ret = update_exprt(ret, idx, value); + //typecast_exprt value(tmp_value, char_type()); + ret = update_exprt(ret, tmp_index, tmp_value); } return ret; } - + void string_refinementt::expect(bool cond, const char *msg) { diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index c3d541725e3..0eb89ea1439 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -56,7 +56,10 @@ class string_refinementt: public bv_refinementt bool is_char_type(const typet &type); bvt convert_bool_bv(const exprt &boole, const exprt &orig); - + + // The following functions convert different string functions to + // bit vectors and add the corresponding lemmas to a list of + // properties to be checked bvt convert_string_equal(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); bvt convert_string_concat(const function_application_exprt &f); From 557b1191ac4782b78b33d164b2e2056d0ed722e1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 5 Aug 2016 12:01:52 +0100 Subject: [PATCH 027/221] Changed the encoding of strings to use a structured type --- src/solvers/refinement/string_refinement.cpp | 486 +++++++++---------- src/solvers/refinement/string_refinement.h | 52 +- 2 files changed, 279 insertions(+), 259 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index b8ec2e17b3e..c770d0bb923 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -15,13 +15,33 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -//#include -//#include + +#define STRING_LENGTH_WIDTH 32 +#define CHAR_WIDTH 8 + +// Defines the type of strings that will be used by our refinement +typet make_string_type(const typet & index_type, const typet & char_type) +{ + // Type for strings that corresponds to : + // struct { index_type length; char_type * content } + struct_typet s; + + s.components().resize(2); + + s.components()[0].set_name("length"); + s.components()[0].set_pretty_name("length"); + s.components()[0].type()=index_type; + + array_typet char_array(char_type,infinity_exprt(index_type)); + s.components()[1].set_name("content"); + s.components()[1].set_pretty_name("content"); + s.components()[1].type()=char_array; + return s; +} string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): - SUB(_ns, _prop) + SUB(_ns, _prop) { - debug() << "string_refinementt initialization" << endl; string_literal_func = "__CPROVER_uninterpreted_string_literal"; char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; @@ -34,67 +54,94 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_char_set_func = "__CPROVER_uninterpreted_char_set"; next_symbol_id = 1; - - // 32; // TODO! - string_length_width = to_bitvector_type(index_type()).get_width(); - debug() << "string_length_width : " << to_bitvector_type(index_type()).get_width() << endl; - string_length_width = string_length_width ? string_length_width : 32; - /// + index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); + char_type = unsignedbv_typet(CHAR_WIDTH); + string_type = make_string_type(index_type,char_type); + debug() << "string_type : " << string_type.pretty() << eom; } - string_refinementt::~string_refinementt() { } -typet string_refinementt::index_type() + +symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, + const typet &tp) { - return unsignedbv_typet(string_length_width); + std::ostringstream buf; + buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); + std::string s = buf.str(); + irep_idt name(s.c_str()); + return symbol_exprt(name, tp); } - -typet string_refinementt::char_type() +exprt string_refinementt::make_string(const exprt &str) { - return unsignedbv_typet(8); + expr_mapt::iterator it = refined_string.find(str); + if (it != refined_string.end()) { + debug() << "string "<< str.get(ID_identifier) <<" found in refined_string" << eom; + return it->second; + } + + symbol_exprt length = fresh_symbol("string_length",get_string_length_type()); + symbol_exprt content = fresh_symbol("string_content",get_string_content_type()); + + struct_exprt struct_string(string_type); + struct_string.move_to_operands(length,content); + refined_string[str] = struct_string; + debug() << "string_refinementt::string(" << str.get(ID_identifier) << ")" << eom; + //returns " << struct_string.pretty() << eom; + + return struct_string; } + void string_refinementt::post_process() { // Ackermann expansion for string lengths - for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); - i != end; ++i) { - exprt si = make_array(i->first); - exprt leni = i->second; + //for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); + debug() << "Not sure about what string_refinementt::post_process() does" << eom; + + for (expr_mapt::iterator i = refined_string.begin(), + end = refined_string.end(); + i != end; ++i) + { + exprt unrefined_i = i -> first; + exprt stri = i->second; + //exprt leni = expr_length(stri); + //exprt si = expr_content(stri); - expr_mapt::iterator j = i; - for (++j; j != end; ++j) { - exprt sj = make_array(j->first); - exprt lenj = j->second; - - implies_exprt lemma(equal_exprt(si, sj), equal_exprt(leni, lenj)); - prop.l_set_to_true(convert(lemma)); + expr_mapt::iterator j = i; + for (++j; j != end; ++j) { + exprt unrefined_j = j -> first; + exprt strj = j->second; + //exprt lenj = expr_length(strj); + //exprt sj = expr_content(strj); + + implies_exprt lemma(equal_exprt(unrefined_i, unrefined_j), equal_exprt(stri, strj)); + prop.l_set_to_true(convert(lemma)); + //implies_exprt lemma(equal_exprt(stri, strj), equal_exprt(leni, lenj));prop.l_set_to_true(convert(lemma)); + //implies_exprt lemma1(equal_exprt(stri, strj), equal_exprt(si, sj)); + //prop.l_set_to_true(convert(lemma1)); } } - add_instantiations(true); } -// Convert an expression to a bit vector bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; - - if (is_string_type(type)) { - make_length(expr); // ensure there is a length for this string - bvt ret = convert_bv(make_array(expr)); - debug () << "We should encode the length of the string in a bit vector, otherwise affectation does not preserve length" << eom; + + if (is_unrefined_string_type(type)) { + bvt ret = convert_bv(make_string(expr)); + debug() << "Warning: what is the effect of map.set_literals?" << eom; map.set_literals(identifier, type, ret); return ret; - } else if (is_char_type(expr.type())) { - symbol_exprt c = fresh_symbol("char", char_type()); + } else if (is_unrefined_char_type(expr.type())) { + symbol_exprt c = fresh_symbol("char", char_type); bvt ret = SUB::convert_symbol(c); map.set_literals(identifier, type, ret); return ret; @@ -106,7 +153,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_struct(const struct_exprt &expr) { - if (is_string_type(expr.type()) || is_char_type(expr.type())) { + if (is_unrefined_string_type(expr.type()) || is_unrefined_char_type(expr.type())) { return bvt(); } else { return SUB::convert_struct(expr); @@ -119,10 +166,10 @@ bvt string_refinementt::convert_function_application( { const exprt &name = expr.function(); - // check if this is something we recognize if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinement.cpp (l.112): check if this is something we recognize, id = " << id << eom; + debug() << "string_refinement::convert_function_application" + << "({id = " << id <<"})" << eom; if (id == string_literal_func) { return convert_string_literal(expr); } else if (id == char_literal_func) { @@ -162,7 +209,7 @@ void string_refinementt::check_SAT() } -bool string_refinementt::is_string_type(const typet &type) +bool string_refinementt::is_unrefined_string_type(const typet &type) { if (type.id() == ID_struct) { irep_idt tag = to_struct_type(type).get_tag(); @@ -171,8 +218,7 @@ bool string_refinementt::is_string_type(const typet &type) return false; } - -bool string_refinementt::is_char_type(const typet &type) +bool string_refinementt::is_unrefined_char_type(const typet &type) { if (type.id() == ID_struct) { irep_idt tag = to_struct_type(type).get_tag(); @@ -181,19 +227,18 @@ bool string_refinementt::is_char_type(const typet &type) return false; } - bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) { bvt ret; ret.push_back(convert(boole)); size_t width = boolbv_width(orig.type()); + debug() << "string_refinementt::convert_bool_bv: why start at i = 1?" << eom; for (size_t i = 1; i < width; ++i) { ret.push_back(const_literal(false)); } return ret; } - bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { @@ -206,9 +251,14 @@ bvt string_refinementt::convert_string_equal( const exprt &s1 = args[0]; const exprt &s2 = args[1]; - symbol_exprt witness = fresh_symbol("index", index_type()); - exprt s1len = make_length(s1); - exprt s2len = make_length(s2); + exprt s1string = make_string(s1); + exprt s2string = make_string(s2); + exprt s1len = expr_length(s1string); + exprt s1arr = expr_content(s1string); + exprt s2len = expr_length(s2string); + exprt s2arr = expr_content(s2string); + + symbol_exprt witness = fresh_symbol("index", index_type); implies_exprt lemma1(eq, equal_exprt(s1len, s2len)); add_lemma(lemma1); @@ -216,8 +266,6 @@ bvt string_refinementt::convert_string_equal( string_axiomt a(string_axioms.size()); a.idx = witness; a.lit = eq; - exprt s1arr = make_array(s1); - exprt s2arr = make_array(s2); a.premise = and_exprt(eq, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt(index_exprt(s1arr, witness), index_exprt(s2arr, witness)); @@ -234,6 +282,24 @@ bvt string_refinementt::convert_string_equal( return bv; } +exprt string_refinementt::expr_length(const exprt & str) +{ + debug() << "string_refinementt::expr_length : " + << "would need more assertions to check the type of str" + << eom; + assert(str.operands().size() == 2); + return str.op0(); +} + +exprt string_refinementt::expr_content(const exprt & str) +{ + debug() << "string_refinementt::expr_content : " + << "would need more assertions to check the type of str" + << eom; + assert(str.operands().size() == 2); + return str.op1(); +} + bvt string_refinementt::convert_string_length( const function_application_exprt &f) @@ -242,16 +308,11 @@ bvt string_refinementt::convert_string_length( const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "bad args to string length"); - debug() << "Warning: changed the behaviour of convert_string_length" << eom; - // exprt len = make_length(args[0]); - //bv = convert_bv(len); - exprt arr = make_array(args[0]); - //std::string idx_binary = integer2binary(0,string_length_width); - std::string idx_binary = integer2binary(0,8); - //constant_exprt idx(idx_binary, index_type()); - constant_exprt idx(idx_binary, char_type()); - bv = convert_bv(index_exprt(arr, idx)); - //bv = convert_constant(constant_exprt("00001010",char_type())); + exprt str = make_string(args[0]); + exprt length = expr_length(str); + debug() << "string_refinementt::string_length : " + << length.pretty() << eom; + bv = convert_bv(length); return bv; } @@ -259,22 +320,21 @@ bvt string_refinementt::convert_string_length( bvt string_refinementt::convert_string_concat( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 2, "bad args to string concat"); - exprt arr = make_array(f); - bv = convert_bv(arr); - const exprt &s1 = args[0]; const exprt &s2 = args[1]; - - exprt len = make_length(f); - exprt s1len = make_length(s1); - exprt s2len = make_length(s2); - - exprt s1arr = make_array(s1); - exprt s2arr = make_array(s2); + exprt str = make_string(f); + exprt s1string = make_string(s1); + exprt s2string = make_string(s2); + exprt len = expr_length(f); + exprt s1len = expr_length(s1string); + exprt s2len = expr_length(s2string); + exprt arr = expr_content(str); + exprt s1arr = expr_content(s1string); + exprt s2arr = expr_content(s2string); + bvt bv = convert_bv(str); equal_exprt lemma1(len, plus_exprt(s1len, s2len)); add_lemma(lemma1); @@ -285,7 +345,7 @@ bvt string_refinementt::convert_string_concat( binary_relation_exprt lemma3(len, ID_ge, s2len); add_lemma(lemma3); - symbol_exprt idx = fresh_symbol("index", index_type()); + symbol_exprt idx = fresh_symbol("index", index_type); string_axiomt a1(string_axioms.size()); a1.idx = idx; @@ -310,36 +370,34 @@ bvt string_refinementt::convert_string_concat( bvt string_refinementt::convert_string_substring( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 3, "bad args to string substring"); - exprt arr = make_array(f); - bv = convert_bv(arr); - - exprt len = make_length(f); - - exprt sarr = make_array(args[0]); - exprt slen = make_length(args[0]); - typecast_exprt i(args[1], index_type()); - typecast_exprt j(args[2], index_type()); - - exprt idx = fresh_symbol("index", index_type()); + exprt str = make_string(f); + exprt len = expr_length(str); + exprt arr = expr_content(str); + exprt arg_str = make_string(args[0]); + exprt arg_len = expr_length(arg_str); + exprt arg_arr = expr_content(arg_str); + typecast_exprt i(args[1], index_type); + typecast_exprt j(args[2], index_type); + bvt bv = convert_bv(arr); + exprt idx = fresh_symbol("index", index_type); string_axiomt a(string_axioms.size()); a.idx = idx; a.lit = nil_exprt(); a.premise = binary_relation_exprt(idx, ID_lt, len); a.body = equal_exprt(index_exprt(arr, idx), - index_exprt(sarr, plus_exprt(i, idx))); + index_exprt(arg_arr, plus_exprt(i, idx))); string_axioms.push_back(a); and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), - and_exprt(binary_relation_exprt(j, ID_le, slen), + and_exprt(binary_relation_exprt(j, ID_le, arg_len), equal_exprt(len, minus_exprt(j, i)))); add_lemma(lemma1); - binary_relation_exprt lemma2(slen, ID_ge, len); + binary_relation_exprt lemma2(arg_len, ID_ge, len); add_lemma(lemma2); return bv; @@ -349,37 +407,38 @@ bvt string_refinementt::convert_string_substring( bvt string_refinementt::convert_string_is_prefix( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 2, "bad args to string isprefix"); symbol_exprt isprefix = fresh_symbol("isprefix"); - bv = convert_bool_bv(isprefix, f); - exprt slen = make_length(args[0]); - exprt sarr = make_array(args[0]); - exprt s1len = make_length(args[1]); - exprt s1arr = make_array(args[1]); + exprt s0str = make_string(args[0]); + exprt s0len = expr_length(s0str); + exprt s0arr = expr_content(s0str); + exprt s1str = make_string(args[1]); + exprt s1len = expr_length(s1str); + exprt s1arr = expr_content(s1str); + bvt bv = convert_bool_bv(isprefix, f); - implies_exprt lemma1(isprefix, binary_relation_exprt(slen, ID_ge, s1len)); + implies_exprt lemma1(isprefix, binary_relation_exprt(s0len, ID_ge, s1len)); add_lemma(lemma1); - symbol_exprt witness = fresh_symbol("index", index_type()); + symbol_exprt witness = fresh_symbol("index", index_type); string_axiomt a(string_axioms.size()); a.idx = witness; a.lit = isprefix; a.premise = and_exprt(isprefix, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt(index_exprt(s1arr, witness), - index_exprt(sarr, witness)); + index_exprt(s0arr, witness)); string_axioms.push_back(a); implies_exprt lemma2( not_exprt(isprefix), - or_exprt(not_exprt(binary_relation_exprt(slen, ID_ge, s1len)), + or_exprt(not_exprt(binary_relation_exprt(s0len, ID_ge, s1len)), and_exprt(binary_relation_exprt(witness, ID_lt, s1len), notequal_exprt(index_exprt(s1arr, witness), - index_exprt(sarr, witness))))); + index_exprt(s0arr, witness))))); add_lemma(lemma2); return bv; @@ -389,22 +448,23 @@ bvt string_refinementt::convert_string_is_prefix( bvt string_refinementt::convert_string_is_suffix( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 2, "bad args to string issuffix"); symbol_exprt issuffix = fresh_symbol("issuffix"); - bv = convert_bool_bv(issuffix, f); + bvt bv = convert_bool_bv(issuffix, f); - exprt slen = make_length(args[0]); - exprt sarr = make_array(args[0]); - exprt s1len = make_length(args[1]); - exprt s1arr = make_array(args[1]); + exprt s0 = make_string(args[0]); + exprt s0len = expr_length(s0); + exprt s0arr = expr_content(s0); + exprt s1 = make_string(args[1]); + exprt s1len = expr_length(s1); + exprt s1arr = expr_content(s1); - implies_exprt lemma1(issuffix, binary_relation_exprt(slen, ID_ge, s1len)); + implies_exprt lemma1(issuffix, binary_relation_exprt(s0len, ID_ge, s1len)); add_lemma(lemma1); - symbol_exprt witness = fresh_symbol("index", index_type()); + symbol_exprt witness = fresh_symbol("index", index_type); string_axiomt a(string_axioms.size()); a.idx = witness; @@ -412,80 +472,62 @@ bvt string_refinementt::convert_string_is_suffix( a.premise = and_exprt(issuffix, binary_relation_exprt(witness, ID_lt, s1len)); a.body = equal_exprt( index_exprt(s1arr, witness), - index_exprt(sarr, - plus_exprt(witness, minus_exprt(slen, s1len)))); + index_exprt(s0arr, + plus_exprt(witness, minus_exprt(s0len, s1len)))); string_axioms.push_back(a); implies_exprt lemma2( not_exprt(issuffix), - or_exprt(not_exprt(binary_relation_exprt(slen, ID_ge, s1len)), + or_exprt(not_exprt(binary_relation_exprt(s0len, ID_ge, s1len)), and_exprt(binary_relation_exprt(witness, ID_lt, s1len), notequal_exprt( index_exprt(s1arr, witness), - index_exprt(sarr, + index_exprt(s0arr, plus_exprt(witness, - minus_exprt(slen, s1len))))))); + minus_exprt(s0len, s1len))))))); add_lemma(lemma2); return bv; } - bvt string_refinementt::convert_string_literal( const function_application_exprt &f) { - bvt bv; - size_t char_width = to_bitvector_type(char_type()).get_width(); const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "bad args to string literal"); - const exprt &arg = args[0]; + bvt bv; + size_t char_width = get_char_width(); + size_t string_length_width = get_string_length_width(); + if (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant){ - const exprt &s = arg.operands()[0].operands()[0].operands()[0]; - irep_idt sval = to_string_constant(s).get_value(); - exprt arr = make_array(f); - bv = convert_bv(arr); - - for (std::size_t i = 0; i < sval.size(); ++i) { - // This needs to be checked - - debug() << "Warning: we switched indexes in strings to encode the length" << eom; - std::string idx_binary = integer2binary(i+1,string_length_width); - constant_exprt idx(idx_binary, index_type()); - - //exprt idx = constant_exprt::integer_constant((unsigned)i); - //exprt idx=from_integer(i, index_type()); - //std::string sval_string = i2string(unsigned(sval[i])); - //sval_string.resize(char_width); - //std::cout << "constant_exprt c("<< sval_string << ", char_type());" << std::endl; - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); - constant_exprt c(sval_binary,char_type()); - equal_exprt lemma(index_exprt(arr, idx), c); + arg.op0().op0().op0().id() == ID_string_constant) + { - add_lemma(lemma); - } - - exprt len = make_length(f); - debug() << "Warning: we are limit the maximal string length to 255 in order to have a simple encoding" << eom; - - //std::string sval_size_string = integer2binary(unsigned(sval.size()),string_length_width); - std::string sval_size_string = integer2binary(unsigned(sval.size()),8); - - equal_exprt lemma1(len, constant_exprt(sval_size_string, char_type())); - add_lemma(lemma1); - - //std::string idx_binary = integer2binary(0,string_length_width); - std::string idx_binary = integer2binary(0,8); - //constant_exprt idx0(idx_binary, index_type()); - constant_exprt idx0(idx_binary, char_type()); - //equal_exprt lemma(index_exprt(arr, idx0),constant_exprt(sval_size_string, index_type())); - equal_exprt lemma(index_exprt(arr, idx0),constant_exprt(sval_size_string, char_type())); - debug() << "adding length constraint : " << arr.pretty() << " : " << idx0.pretty() << " == " << sval_size_string << eom; + const exprt &s = arg.op0().op0().op0(); + irep_idt sval = to_string_constant(s).get_value(); + exprt str = make_string(f); + bv = convert_bv(str); + exprt content = expr_content(str); + + for (std::size_t i = 0; i < sval.size(); ++i) { + std::string idx_binary = integer2binary(i,string_length_width); + constant_exprt idx(idx_binary, index_type); + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,char_type); + equal_exprt lemma(index_exprt(content, idx), c); + add_lemma(lemma); + } + + std::string s_length_binary = integer2binary(unsigned(sval.size()),32); + exprt s_length = constant_exprt(s_length_binary, get_string_length_type()); + exprt length = expr_length(str); + equal_exprt lemma(length,s_length); + debug() << "adding length constraint : " << length.pretty() << " == " << s_length.pretty() << eom; - add_lemma(lemma); + add_lemma(lemma); } else { expect(false, "bad arg to string literal"); } @@ -494,13 +536,12 @@ bvt string_refinementt::convert_string_literal( } + bvt string_refinementt::convert_char_literal( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 1, "there should be exactly 1 argument to char literal"); - const exprt &arg = args[0]; expect(arg.operands().size() == 1 && @@ -512,21 +553,10 @@ bvt string_refinementt::convert_char_literal( irep_idt sval = s.get_value(); expect(sval.size() == 1, "the argument to char literal should be a string of size 1"); - size_t char_width = boolbv_width(char_type()); - //to_bitvector_type(char_type()).get_width(); - - // this does not seem to work : - //constant_exprt e(unsigned(sval[0]), char_type()); - //bv.resize(char_width); - - // This part needs to be checked - //std::string sval_string = i2string(unsigned(sval[0])); - //sval_string.resize(char_width); + size_t char_width = get_char_width(); std::string binary=integer2binary(unsigned(sval[0]), char_width); - constant_exprt e(binary, char_type()); - bv = convert_bv(e); - //constant_exprt e(s, char_type()); bv = convert_bv(e); - debug() << "converted char literal "<< binary << eom; + constant_exprt e(binary, char_type); + bvt bv = convert_bv(e); return bv; } @@ -538,12 +568,10 @@ bvt string_refinementt::convert_string_char_at( const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 2, "string_char_at expects 2 arguments"); - debug() << "convert_string_char_at:" << eom; - exprt arr = make_array(args[0]); - debug() << "[" << args[1].pretty() << "]" << eom; - //typecast_exprt pos(args[1], index_type()); - debug() << "string_refinementt::convert_string_char_at: warning: removed typecast" << eom; - bv = convert_bv(index_exprt(arr, args[1])); + exprt str = make_string(args[0]); + exprt content = expr_content(str); + typecast_exprt pos(args[1], index_type); + bv = convert_bv(index_exprt(content, pos)); return bv; } @@ -551,22 +579,24 @@ bvt string_refinementt::convert_string_char_at( bvt string_refinementt::convert_string_char_set( const function_application_exprt &f) { - bvt bv; const function_application_exprt::argumentst &args = f.arguments(); expect(args.size() == 3, "bad args to string_char_set"); - exprt arr = make_array(f); - bv = convert_bv(arr); - exprt len = make_length(f); - - exprt sarr = make_array(args[0]); - exprt slen = make_length(args[0]); - typecast_exprt idx(args[1], index_type()); + exprt str = make_string(f); + exprt arr = expr_content(str); + exprt len = expr_length(str); + bvt bv = convert_bv(arr); + + exprt sarg = make_string(args[0]); + exprt sarr = expr_content(sarg); + exprt slen = expr_length(sarg); + typecast_exprt idx(args[1], index_type); - symbol_exprt c = fresh_symbol("char", char_type()); + symbol_exprt c = fresh_symbol("char", char_type); bvt bva = convert_bv(args[2]); bvt bvc = convert_bv(c); bva.resize(bvc.size(), const_literal(false)); + debug() << "convert_string_char_set: Why don't we include 0?" << eom; for (size_t i = 0; i < bvc.size(); ++i) { prop.set_equal(bva[i], bvc[i]); } @@ -633,22 +663,25 @@ bool string_refinementt::check_axioms() debug() << "string_refinementt::check_axioms: build the interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; - for (expr_mapt::iterator it = string2length.begin(), - end = string2length.end(); it != end; ++it) { - const exprt &s = it->first; - const exprt &l = it->second; - expr_mapt::iterator j = string2array.find(s); - assert(j != string2array.end()); - const exprt &a = j->second; + for (expr_mapt::iterator it = refined_string.begin(), + end = refined_string.end(); it != end; ++it) { + const exprt &unrefined = it->first; + const exprt &refined = it->second; + exprt str = get(refined); + debug() << "check_axioms adds to the model:" << unrefined.get(ID_identifier) << " := "; + debug() << str.pretty() << eom; + + const exprt &a = expr_content(refined); + const exprt &l = expr_length(refined); exprt len = get(l); debug() << "string_refinementt::check_axioms: get_array(" << a.get(ID_identifier) << ","<< len.get(ID_value) << ")" << eom; - exprt arr = get_array(a, len); + //exprt arr = get_array(a, len); fmodel[l] = len; - fmodel[a] = arr; - debug() << "check_axioms adds to the model:" << a.get(ID_identifier) << " := "; - print_array(debug(), arr); - debug() << eom; + //fmodel[a] = arr; + debug() << "check_axioms adds to the model:" << a.get(ID_identifier) << " length = "; + //print_array(debug(), arr); + debug() << len.pretty() << eom; } std::vector< std::pair > violated; @@ -925,68 +958,23 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, return instance; } - -symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, - const typet &tp) -{ - std::ostringstream buf; - buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); - std::string s = buf.str(); - irep_idt name(s.c_str()); - return symbol_exprt(name, tp); -} - - - -// Find the symbol corresponding to an array. -// Create a fresh one if it cannot be found -exprt string_refinementt::make_array(const exprt &str) -{ - expr_mapt::iterator it = string2array.find(str); - if (it != string2array.end()) { - debug() << "found in string2array" << eom; - return it->second; - } - symbol_exprt arr = fresh_symbol("string_array", - array_typet(char_type(), - infinity_exprt(integer_typet()))); - - debug() << "string_refinementt::make_array(" << str.get(ID_identifier) << ") -> new symbol " << arr.get(ID_identifier) << eom; - string2array[str] = arr; - return arr; -} - -// Find the symbol corresponding to the length of an array. -// This should be integrated in make array -exprt string_refinementt::make_length(const exprt &str) -{ - debug() << "Warning: called make_length" << eom; - expr_mapt::iterator it = string2length.find(str); - if (it != string2length.end()) { - return it->second; - } - //symbol_exprt len = fresh_symbol("string_length", index_type()); - symbol_exprt len = fresh_symbol("string_length", char_type()); - string2length[str] = len; - length2string[len] = str; - return len; -} - exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { + debug() << "string_refinementt::get_array(" << arr.pretty() << "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); + debug() << "model :: " << val.pretty() << eom; expect(val.id() == "array-list", "unable to get array-list value"); exprt ret = - array_of_exprt(to_unsignedbv_type(char_type()).zero_expr(), - array_typet(char_type(), size)); + array_of_exprt(to_unsignedbv_type(char_type).zero_expr(), + array_typet(char_type, size)); for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; debug() << "string_refinementt::get_array: warning: removed typecast" << eom; - //typecast_exprt idx(tmp_index, index_type()); + //typecast_exprt idx(tmp_index, index_type); exprt tmp_value = val.operands()[i*2+1]; - //typecast_exprt value(tmp_value, char_type()); + //typecast_exprt value(tmp_value, char_type); ret = update_exprt(ret, tmp_index, tmp_value); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 0eb89ea1439..54900346a5d 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -25,6 +25,29 @@ class string_refinementt: public bv_refinementt typedef bv_refinementt SUB; + // Internal type used for strings + inline typet get_string_type() { return string_type; }; + // Type of characters + inline typet get_char_type() { return char_type; }; + // Type of character indexes in the string + inline typet get_index_type() { return index_type; }; + // Type to encode the length of a string + inline typet get_string_length_type() + { return (to_struct_type(string_type)).components()[0].type();} + // Type for the content (list of characters) of a string + inline typet get_string_content_type() + { return (to_struct_type(string_type)).components()[1].type();} + inline size_t get_char_width() + { return to_bitvector_type(char_type).get_width();} + inline size_t get_string_length_width() + { return to_bitvector_type(get_string_length_type()).get_width();} + + +private: + typet index_type; + typet char_type; + typet string_type; + protected: struct string_axiomt { @@ -52,8 +75,8 @@ class string_refinementt: public bv_refinementt const function_application_exprt &expr); virtual void check_SAT(); - bool is_string_type(const typet &type); - bool is_char_type(const typet &type); + bool is_unrefined_string_type(const typet &type); + bool is_unrefined_char_type(const typet &type); bvt convert_bool_bv(const exprt &boole, const exprt &orig); @@ -79,12 +102,21 @@ class string_refinementt: public bv_refinementt const exprt &val); void add_lemma(const exprt &lemma); + // Generate a new symbol of the given type tp with a prefix symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); - typet index_type(); - typet char_type(); - exprt make_array(const exprt &str); - exprt make_length(const exprt &str); + + + // Gives the string corresponding to an expression + exprt make_string(const exprt &str); + + // Get the expression corresponding to the length of a string + // The string should have type string_type. + exprt expr_length(const exprt &str); + // Get the expression corresponding to the content of a string + exprt expr_content(const exprt &str); + + // Get a model of the given array exprt get_array(const exprt &arr, const exprt &size); void expect(bool cond, const char *errmsg=NULL); @@ -99,13 +131,13 @@ class string_refinementt: public bv_refinementt irep_idt string_is_prefix_func; irep_idt string_is_suffix_func; irep_idt string_char_set_func; - size_t string_length_width; axiom_vect string_axioms; expr_sett strings; - expr_mapt string2length; - expr_mapt length2string; - expr_mapt string2array; + //expr_mapt string2length; + //expr_mapt length2string; + //expr_mapt string2array; + expr_mapt refined_string; expr_sett seen_instances; index_sett index_set; unsigned next_symbol_id; From a1fce4fc80200f3fcfa3828a1754053849118bff Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 5 Aug 2016 12:20:58 +0100 Subject: [PATCH 028/221] Post proccessing of the lemmas --- src/solvers/refinement/string_refinement.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index c770d0bb923..69e9242994f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -101,7 +101,6 @@ void string_refinementt::post_process() { // Ackermann expansion for string lengths //for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); - debug() << "Not sure about what string_refinementt::post_process() does" << eom; for (expr_mapt::iterator i = refined_string.begin(), end = refined_string.end(); @@ -109,21 +108,14 @@ void string_refinementt::post_process() { exprt unrefined_i = i -> first; exprt stri = i->second; - //exprt leni = expr_length(stri); - //exprt si = expr_content(stri); expr_mapt::iterator j = i; for (++j; j != end; ++j) { exprt unrefined_j = j -> first; exprt strj = j->second; - //exprt lenj = expr_length(strj); - //exprt sj = expr_content(strj); implies_exprt lemma(equal_exprt(unrefined_i, unrefined_j), equal_exprt(stri, strj)); prop.l_set_to_true(convert(lemma)); - //implies_exprt lemma(equal_exprt(stri, strj), equal_exprt(leni, lenj));prop.l_set_to_true(convert(lemma)); - //implies_exprt lemma1(equal_exprt(stri, strj), equal_exprt(si, sj)); - //prop.l_set_to_true(convert(lemma1)); } } add_instantiations(true); From c4c08153ed30e21cd2aeb86ac33113aaaeb8090b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 9 Aug 2016 09:24:56 +0100 Subject: [PATCH 029/221] Converting all strings to bit vectors using a structure containing the length and content --- regression/strings/cprover-string-hack.h | 3 + regression/strings/test1/test.c | 5 +- regression/strings/test2/test.c | 1 - src/solvers/flattening/boolbv.cpp | 3 + src/solvers/refinement/string_refinement.cpp | 463 +++++++++++++------ src/solvers/refinement/string_refinement.h | 31 +- 6 files changed, 343 insertions(+), 163 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index b2a86c2d425..ece71c21ecc 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -10,6 +10,9 @@ typedef struct __CPROVER_char { char c; } __CPROVER_char; /* string equality */ #define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal(s1, s2) +/* string copy */ +#define __CPROVER_string_copy(dest, src) __CPROVER_uninterpreted_string_copy(dest, src) + /* defines a string literal, e.g. __CPROVER_string_literal("foo") */ #define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal(s) diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c index 104aac0d377..df1776a5b9d 100644 --- a/regression/strings/test1/test.c +++ b/regression/strings/test1/test.c @@ -12,9 +12,6 @@ int main() s = __CPROVER_string_literal("pippo"); c1 = __CPROVER_char_at(s, i); c2 = __CPROVER_char_literal("p"); - if (c1 == c2) { - j = 1; - } - assert(j == 1); + assert (c1 == c2); return 0; } diff --git a/regression/strings/test2/test.c b/regression/strings/test2/test.c index cfb54b4265a..827cc5119b8 100644 --- a/regression/strings/test2/test.c +++ b/regression/strings/test2/test.c @@ -1,7 +1,6 @@ #include #include "../cprover-string-hack.h" - int main() { __CPROVER_string s; diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index c41d8440d6c..9d07e72977a 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -720,6 +720,7 @@ Function: boolbvt::boolbv_set_equality_to_true bool boolbvt::boolbv_set_equality_to_true(const equal_exprt &expr) { + if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); @@ -761,6 +762,8 @@ Function: boolbvt::set_to void boolbvt::set_to(const exprt &expr, bool value) { + + if(expr.type().id()!=ID_bool) { error() << "boolbvt::set_to got non-boolean operand: " diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 69e9242994f..9e95af86de0 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -46,6 +46,7 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; string_equal_func = "__CPROVER_uninterpreted_string_equal"; + string_copy_func = "__CPROVER_uninterpreted_string_copy"; string_char_at_func = "__CPROVER_uninterpreted_char_at"; string_concat_func = "__CPROVER_uninterpreted_strcat"; string_substring_func = "__CPROVER_uninterpreted_substring"; @@ -65,7 +66,6 @@ string_refinementt::~string_refinementt() { } - symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, const typet &tp) { @@ -78,66 +78,224 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, exprt string_refinementt::make_string(const exprt &str) { + assert(is_unrefined_string_type(str.type())); expr_mapt::iterator it = refined_string.find(str); - if (it != refined_string.end()) { - debug() << "string "<< str.get(ID_identifier) <<" found in refined_string" << eom; - return it->second; - } + if (it != refined_string.end()) return it->second; symbol_exprt length = fresh_symbol("string_length",get_string_length_type()); symbol_exprt content = fresh_symbol("string_content",get_string_content_type()); + + debug() << "string_refinementt::make_string(" ; + if (str.get(ID_identifier) != "") + debug() << str.get(ID_identifier); + else if (str.operands().size() > 0) + debug() << str.op0().get(ID_identifier); + + debug() << ") -> {" + << length.get(ID_identifier) << " ; " + << content.get(ID_identifier) << " } " + << eom; struct_exprt struct_string(string_type); struct_string.move_to_operands(length,content); refined_string[str] = struct_string; - debug() << "string_refinementt::string(" << str.get(ID_identifier) << ")" << eom; - //returns " << struct_string.pretty() << eom; - return struct_string; } -void string_refinementt::post_process() +exprt string_refinementt::expr_length(const exprt & str) { - // Ackermann expansion for string lengths - //for (expr_mapt::iterator i = string2length.begin(), end = string2length.end(); + assert(str.type() == string_type); + member_exprt m (str,"length",get_string_length_type()); + return m; +} + +bvt string_refinementt::bv_length(bvt struct_bv) { + const struct_typet::componentst &components= + to_struct_type(string_type).components(); + + std::size_t offset=0; + + for(struct_typet::componentst::const_iterator + it=components.begin(); + it!=components.end(); + it++) + { + const typet &subtype=it->type(); + std::size_t sub_width=boolbv_width(subtype); + + if(it->get_name()=="length") + { + assert(subtype == get_string_length_type()); + bvt bv; + bv.resize(sub_width); + assert(offset+sub_width<=struct_bv.size()); + + for(std::size_t i=0; i first; - exprt stri = i->second; + const typet &subtype=it->type(); + std::size_t sub_width=boolbv_width(subtype); + + if(it->get_name()=="content") + { + assert(subtype == get_string_content_type()); + bvt bv; + bv.resize(sub_width); + assert(offset+sub_width<=struct_bv.size()); + + for(std::size_t i=0; i 0) + for (int i =0; i 1) { + pretty_short(debug(), expr.op0()); + debug() << " == "; + pretty_short(debug(), expr.op1()); + } else + pretty_short(debug(), expr); + debug() << ")" << eom; + + const typet &type=ns.follow(expr.lhs().type()); + + if(expr.lhs().id()==ID_symbol && + type==ns.follow(expr.rhs().type()) && + type.id()!=ID_bool) + { + if(is_unrefined_string_type(type)) { + const irep_idt &identifier = + to_symbol_expr(expr.lhs()).get_identifier(); + //exprt str = make_string(expr.lhs()); + + const bvt &bv=convert_bv(expr.rhs()); + debug() << "map.set_literals: " << identifier << " --> "; + pretty_short(debug(),expr.rhs()); + debug() << eom; + refined_string[expr.lhs()] = expr.rhs();// not really useful + map.set_literals(identifier, get_string_type(), bv); + if(freeze_all) set_frozen(bv); - expr_mapt::iterator j = i; - for (++j; j != end; ++j) { - exprt unrefined_j = j -> first; - exprt strj = j->second; - - implies_exprt lemma(equal_exprt(unrefined_i, unrefined_j), equal_exprt(stri, strj)); - prop.l_set_to_true(convert(lemma)); + return false; } + else + return SUB::boolbv_set_equality_to_true(expr); } - add_instantiations(true); + + return true; } bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); + debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; - + + if (is_unrefined_string_type(type)) { - bvt ret = convert_bv(make_string(expr)); - debug() << "Warning: what is the effect of map.set_literals?" << eom; - map.set_literals(identifier, type, ret); - return ret; + bvt bv; + bv.resize(get_string_width()); + map.get_literals(identifier, string_type, get_string_width(), bv); + //convert_bv();//make_string(expr)); + //debug() << "map.set_literals " << identifier << eom; + //map.set_literals(identifier, type, ret); + return bv; } else if (is_unrefined_char_type(expr.type())) { - symbol_exprt c = fresh_symbol("char", char_type); - bvt ret = SUB::convert_symbol(c); - map.set_literals(identifier, type, ret); + bvt ret = convert_bv(make_char(expr)); + //debug() << "map.set_literals " << identifier << eom; + //map.set_literals(identifier, type, ret); return ret; - } else { + } else + { return SUB::convert_symbol(expr); } } @@ -145,22 +303,20 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_struct(const struct_exprt &expr) { - if (is_unrefined_string_type(expr.type()) || is_unrefined_char_type(expr.type())) { - return bvt(); - } else { - return SUB::convert_struct(expr); - } + //if (is_unrefined_string_type(expr.type()) || is_unrefined_char_type(expr.type())) { return bvt(); } else { + return SUB::convert_struct(expr); + //} } bvt string_refinementt::convert_function_application( - const function_application_exprt &expr) + const function_application_exprt &expr) { const exprt &name = expr.function(); if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinement::convert_function_application" + debug() << "string_refinementt::convert_function_application" << "({id = " << id <<"})" << eom; if (id == string_literal_func) { return convert_string_literal(expr); @@ -231,6 +387,8 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) return ret; } + + bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { @@ -238,7 +396,7 @@ bvt string_refinementt::convert_string_equal( bvt bv = convert_bool_bv(eq, f); const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "bad args to string equal"); + assert(args.size() == 2); //bad args to string equal? const exprt &s1 = args[0]; const exprt &s2 = args[1]; @@ -274,37 +432,19 @@ bvt string_refinementt::convert_string_equal( return bv; } -exprt string_refinementt::expr_length(const exprt & str) -{ - debug() << "string_refinementt::expr_length : " - << "would need more assertions to check the type of str" - << eom; - assert(str.operands().size() == 2); - return str.op0(); -} - -exprt string_refinementt::expr_content(const exprt & str) -{ - debug() << "string_refinementt::expr_content : " - << "would need more assertions to check the type of str" - << eom; - assert(str.operands().size() == 2); - return str.op1(); -} - bvt string_refinementt::convert_string_length( const function_application_exprt &f) { - bvt bv; + //bvt bv; const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 1, "bad args to string length"); - - exprt str = make_string(args[0]); - exprt length = expr_length(str); - debug() << "string_refinementt::string_length : " - << length.pretty() << eom; - bv = convert_bv(length); + assert(args.size() == 1); //bad args to string length? + debug() << "in string_refinementt::convert_string_length("; + pretty_short(debug(),args[0]); + debug() << " ) " << eom; + bvt str = convert_bv(args[0]); + bvt bv = bv_length(str); + // bv = convert_bv(length); return bv; } @@ -313,7 +453,7 @@ bvt string_refinementt::convert_string_concat( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "bad args to string concat"); + assert(args.size() == 2); //bad args to string concat const exprt &s1 = args[0]; const exprt &s2 = args[1]; @@ -363,7 +503,7 @@ bvt string_refinementt::convert_string_substring( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 3, "bad args to string substring"); + assert(args.size() == 3); // bad args to string substring? exprt str = make_string(f); exprt len = expr_length(str); @@ -400,7 +540,7 @@ bvt string_refinementt::convert_string_is_prefix( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "bad args to string isprefix"); + assert(args.size() == 2); //bad args to string isprefix symbol_exprt isprefix = fresh_symbol("isprefix"); @@ -441,7 +581,7 @@ bvt string_refinementt::convert_string_is_suffix( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "bad args to string issuffix"); + assert(args.size() == 2); // bad args to string issuffix? symbol_exprt issuffix = fresh_symbol("issuffix"); bvt bv = convert_bool_bv(issuffix, f); @@ -486,45 +626,42 @@ bvt string_refinementt::convert_string_literal( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 1, "bad args to string literal"); + assert(args.size() == 1); //bad args to string literal? const exprt &arg = args[0]; - bvt bv; size_t char_width = get_char_width(); size_t string_length_width = get_string_length_width(); - if (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) - { - - const exprt &s = arg.op0().op0().op0(); - irep_idt sval = to_string_constant(s).get_value(); - exprt str = make_string(f); - bv = convert_bv(str); - exprt content = expr_content(str); + assert (arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? - for (std::size_t i = 0; i < sval.size(); ++i) { - std::string idx_binary = integer2binary(i,string_length_width); - constant_exprt idx(idx_binary, index_type); - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); - constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content, idx), c); - add_lemma(lemma); - } - - std::string s_length_binary = integer2binary(unsigned(sval.size()),32); - exprt s_length = constant_exprt(s_length_binary, get_string_length_type()); - exprt length = expr_length(str); - equal_exprt lemma(length,s_length); - debug() << "adding length constraint : " << length.pretty() << " == " << s_length.pretty() << eom; - - add_lemma(lemma); - } else { - expect(false, "bad arg to string literal"); + const exprt &s = arg.op0().op0().op0(); + irep_idt sval = to_string_constant(s).get_value(); + exprt str = make_string(f); + bvt bv_str = convert_bv(str); + + bvt content = bv_content(bv_str); + + /* + for (std::size_t i = 0; i < sval.size(); ++i) { + std::string idx_binary = integer2binary(i,string_length_width); + constant_exprt idx(idx_binary, index_type); + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,char_type); + equal_exprt lemma(index_exprt(content, idx), c); + add_lemma(lemma); } + */ - return bv; + std::string s_length_binary = integer2binary(unsigned(sval.size()),32); + exprt s_length = constant_exprt(s_length_binary, get_string_length_type()); + exprt length = expr_length(str); + equal_exprt lemma(length,s_length); + debug() << "string_refinementt::convert_string_literal adds length constraint : " << length.get(ID_identifier) << " == " << s_length.get(ID_value) << eom; + add_lemma(lemma); + + return bv_str; } @@ -533,21 +670,22 @@ bvt string_refinementt::convert_char_literal( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 1, "there should be exactly 1 argument to char literal"); + assert(args.size() == 1); // there should be exactly 1 argument to char literal const exprt &arg = args[0]; - expect(arg.operands().size() == 1 && + assert(arg.operands().size() == 1 && arg.op0().operands().size() == 1 && arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant, "argument to char literal should be one string constant"); + arg.op0().op0().op0().id() == ID_string_constant); // argument to char literal should be one string constant const string_constantt s = to_string_constant(arg.op0().op0().op0()); irep_idt sval = s.get_value(); - expect(sval.size() == 1, "the argument to char literal should be a string of size 1"); + assert(sval.size() == 1); //the argument to char literal should be a string of size 1 size_t char_width = get_char_width(); std::string binary=integer2binary(unsigned(sval[0]), char_width); constant_exprt e(binary, char_type); + refined_char[f] = e; bvt bv = convert_bv(e); return bv; } @@ -558,12 +696,19 @@ bvt string_refinementt::convert_string_char_at( { bvt bv; const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 2, "string_char_at expects 2 arguments"); + assert(args.size() == 2); //string_char_at expects 2 arguments + exprt chr = make_char(f); exprt str = make_string(args[0]); exprt content = expr_content(str); typecast_exprt pos(args[1], index_type); - bv = convert_bv(index_exprt(content, pos)); + index_exprt char_at(content, pos); + debug() << "string_refinementt::convert_char_at adds char constr. : " + << chr.get(ID_identifier) << " == " + << char_at.pretty() << eom; + equal_exprt lemma(chr,char_at); + add_lemma(lemma); + bv = convert_bv(chr); return bv; } @@ -572,7 +717,7 @@ bvt string_refinementt::convert_string_char_set( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - expect(args.size() == 3, "bad args to string_char_set"); + assert(args.size() == 3); //bad args to string_char_set? exprt str = make_string(f); exprt arr = expr_content(str); @@ -643,7 +788,13 @@ std::ostream & print_array(std::ostream & out, const exprt &val) { while(e.operands().size() == 3) { exprt tmp_index = e.op1(); exprt tmp_value = e.op2(); - out << tmp_index.get(ID_value) << "->" << ((tmp_value.get(ID_value)!="")?tmp_value.get(ID_value):tmp_value.pretty()) << " ; "; + irep_idt val; + if(e.operands().size() == 1) + val = tmp_value.op0().get(ID_value); + else + val = tmp_value.get(ID_value); + + out << tmp_index.get(ID_value) << "->" << val << " ; "; e = e.op0(); } return out; @@ -652,30 +803,36 @@ std::ostream & print_array(std::ostream & out, const exprt &val) { bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver + + debug() << "string_refinementt::check_axioms: ==========================================================" << eom; debug() << "string_refinementt::check_axioms: build the interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; - + + for (expr_mapt::iterator it = refined_string.begin(), end = refined_string.end(); it != end; ++it) { - const exprt &unrefined = it->first; const exprt &refined = it->second; - exprt str = get(refined); - debug() << "check_axioms adds to the model:" << unrefined.get(ID_identifier) << " := "; - debug() << str.pretty() << eom; - - const exprt &a = expr_content(refined); - const exprt &l = expr_length(refined); - - exprt len = get(l); - debug() << "string_refinementt::check_axioms: get_array(" << a.get(ID_identifier) << ","<< len.get(ID_value) << ")" << eom; - //exprt arr = get_array(a, len); - fmodel[l] = len; - //fmodel[a] = arr; - debug() << "check_axioms adds to the model:" << a.get(ID_identifier) << " length = "; - //print_array(debug(), arr); - debug() << len.pretty() << eom; + const exprt &econtent = expr_content(refined); + const exprt &elength = expr_length(refined); + + exprt len = get(elength); + exprt arr = get_array(econtent, len); + fmodel[elength] = len; + fmodel[econtent] = arr; + debug() << "check_axioms adds to the model:" << it->first.get(ID_identifier) << " -> " << arr.get(ID_identifier) << " [length=" << len.pretty() /*get(ID_value)*/ << "] "; + print_array(debug(), arr); + debug() << eom; } + /* + for (expr_mapt::iterator it = refined_char.begin(), + end = refined_char.end(); it != end; ++it) { + const exprt &refined = it->second; + exprt chr = get(refined); + fmodel[refined] = chr; + debug() << "check_axioms adds to the model:" << it->first.get(ID_identifier) << " -> " << refined.get(ID_identifier) << " -> " << chr.get(ID_value) << eom; + } + */ std::vector< std::pair > violated; for (size_t i = 0; i < string_axioms.size(); ++i) { @@ -703,7 +860,8 @@ bool string_refinementt::check_axioms() debug() << "unsatisfiable" << eom; break; default: - expect(false, "failure in checking axiom"); + throw "failure in checking axiom"; + //expect(false, "failure in checking axiom"); } } @@ -952,32 +1110,31 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { - debug() << "string_refinementt::get_array(" << arr.pretty() << "," << size.get(ID_value) << ")" << eom; + debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) << "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); - debug() << "model :: " << val.pretty() << eom; - expect(val.id() == "array-list", "unable to get array-list value"); - - exprt ret = - array_of_exprt(to_unsignedbv_type(char_type).zero_expr(), - array_typet(char_type, size)); - - for (size_t i = 0; i < val.operands().size()/2; ++i) { - exprt tmp_index = val.operands()[i*2]; - debug() << "string_refinementt::get_array: warning: removed typecast" << eom; - //typecast_exprt idx(tmp_index, index_type); - exprt tmp_value = val.operands()[i*2+1]; - //typecast_exprt value(tmp_value, char_type); - ret = update_exprt(ret, tmp_index, tmp_value); + //expect(val.id() == "array-list", "unable to get array-list value"); + + if(val.id() == "array-list") { + exprt ret = + array_of_exprt(to_unsignedbv_type(char_type).zero_expr(), + array_typet(char_type, size)); + + for (size_t i = 0; i < val.operands().size()/2; ++i) { + exprt tmp_index = val.operands()[i*2]; + typecast_exprt idx(tmp_index, index_type); + exprt tmp_value = val.operands()[i*2+1]; + typecast_exprt value(tmp_value, char_type); + ret = update_exprt(ret, idx, value); + } + return ret; + + } else { + debug() << "unable to get array-list value of " + << val.pretty() << eom; + return arr; } - - return ret; + } -void string_refinementt::expect(bool cond, const char *msg) -{ - if (!cond) { - throw (msg ? msg : "assertion failure!"); - } - assert(cond); -} + diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 54900346a5d..85f1a697c30 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -41,6 +41,8 @@ class string_refinementt: public bv_refinementt { return to_bitvector_type(char_type).get_width();} inline size_t get_string_length_width() { return to_bitvector_type(get_string_length_type()).get_width();} + inline size_t get_string_width() + { return boolbv_width(string_type);} private: @@ -70,6 +72,8 @@ class string_refinementt: public bv_refinementt virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); + // Find the string expression corresponding to a string symbol + exprt expr_symbol(const exprt &expr); virtual bvt convert_struct(const struct_exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); @@ -84,6 +88,7 @@ class string_refinementt: public bv_refinementt // bit vectors and add the corresponding lemmas to a list of // properties to be checked bvt convert_string_equal(const function_application_exprt &f); + bvt convert_string_copy(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); bvt convert_string_concat(const function_application_exprt &f); bvt convert_string_substring(const function_application_exprt &f); @@ -94,6 +99,7 @@ class string_refinementt: public bv_refinementt bvt convert_string_char_at(const function_application_exprt &f); bvt convert_string_char_set(const function_application_exprt &f); + bool boolbv_set_equality_to_true(const equal_exprt &expr); void add_instantiations(bool first=false); bool check_axioms(); void update_index_set(const exprt &formula); @@ -110,21 +116,29 @@ class string_refinementt: public bv_refinementt // Gives the string corresponding to an expression exprt make_string(const exprt &str); + // Gives the character corresponding to an expression + exprt make_char(const exprt &chr); + // Get the expression corresponding to the length of a string // The string should have type string_type. exprt expr_length(const exprt &str); // Get the expression corresponding to the content of a string exprt expr_content(const exprt &str); + bvt bv_length(bvt struct_bv); + bvt bv_content(bvt struct_bv); + //symbol_exprt symbol_length(const exprt & str); + //symbol_exprt symbol_content(const exprt & str); + + // Get a model of the given array exprt get_array(const exprt &arr, const exprt &size); - void expect(bool cond, const char *errmsg=NULL); - irep_idt string_literal_func; irep_idt char_literal_func; irep_idt string_length_func; irep_idt string_equal_func; + irep_idt string_copy_func; irep_idt string_char_at_func; irep_idt string_concat_func; irep_idt string_substring_func; @@ -132,17 +146,24 @@ class string_refinementt: public bv_refinementt irep_idt string_is_suffix_func; irep_idt string_char_set_func; + + axiom_vect string_axioms; expr_sett strings; - //expr_mapt string2length; - //expr_mapt length2string; - //expr_mapt string2array; + // gives the length and content symbols associated to a string symbol expr_mapt refined_string; + expr_mapt refined_char; expr_sett seen_instances; index_sett index_set; unsigned next_symbol_id; std::vector cur; + + // These are now unused: + //expr_mapt string2length; + //expr_mapt length2string; + //expr_mapt string2array; + }; #endif From a3e39ea8921d6aef4f0bcca02de4fc508da63b93 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 9 Aug 2016 10:51:23 +0100 Subject: [PATCH 030/221] cleaned some code --- src/solvers/refinement/string_refinement.cpp | 253 +++++++------------ src/solvers/refinement/string_refinement.h | 15 +- 2 files changed, 103 insertions(+), 165 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9e95af86de0..6ae1c6190ab 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -19,6 +19,19 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #define STRING_LENGTH_WIDTH 32 #define CHAR_WIDTH 8 +// Succinct version of pretty() +std::string pretty_short(exprt expr) { + std::ostringstream buf; + if(expr.get(ID_identifier) != "") { + buf << expr.get(ID_identifier); + return buf.str(); + } else if (expr.operands().size() > 0) { + for (int i =0; isecond; symbol_exprt length = fresh_symbol("string_length",get_string_length_type()); symbol_exprt content = fresh_symbol("string_content",get_string_content_type()); - debug() << "string_refinementt::make_string(" ; - if (str.get(ID_identifier) != "") - debug() << str.get(ID_identifier); - else if (str.operands().size() > 0) - debug() << str.op0().get(ID_identifier); - - debug() << ") -> {" - << length.get(ID_identifier) << " ; " - << content.get(ID_identifier) << " } " - << eom; - struct_exprt struct_string(string_type); struct_string.move_to_operands(length,content); refined_string[str] = struct_string; return struct_string; } +symbol_exprt string_refinementt::symbol_content(const exprt & str) +{ + assert(str.type() == string_type); + assert(str.operands().size() == 2); + return to_symbol_expr(str.op1()); +} + exprt string_refinementt::expr_length(const exprt & str) { @@ -110,58 +139,21 @@ exprt string_refinementt::expr_length(const exprt & str) return m; } -bvt string_refinementt::bv_length(bvt struct_bv) { - const struct_typet::componentst &components= - to_struct_type(string_type).components(); - - std::size_t offset=0; - - for(struct_typet::componentst::const_iterator - it=components.begin(); - it!=components.end(); - it++) - { - const typet &subtype=it->type(); - std::size_t sub_width=boolbv_width(subtype); - - if(it->get_name()=="length") - { - assert(subtype == get_string_length_type()); - bvt bv; - bv.resize(sub_width); - assert(offset+sub_width<=struct_bv.size()); - - for(std::size_t i=0; itype(); std::size_t sub_width=boolbv_width(subtype); - if(it->get_name()=="content") + if(it->get_name()==name) { - assert(subtype == get_string_content_type()); + assert(subtype == subtype); bvt bv; bv.resize(sub_width); assert(offset+sub_width<=struct_bv.size()); @@ -174,77 +166,42 @@ bvt string_refinementt::bv_content(bvt struct_bv) { offset+=sub_width; } - error() << "component content" - << " not found in structure" << eom; + error() << "component " << name << " not found in structure" << eom; throw 0; } -/* -symbol_exprt string_refinementt::symbol_length(const exprt & str) -{ - assert(str.type() == string_type); - assert(str.operands().size() == 2); - return to_symbol_expr(str.op0()); - }*/ - exprt string_refinementt::expr_content(const exprt & str) { - //assert(is_unrefined_string_type(str.type())); assert(str.type() == string_type); return member_exprt(str,"content",get_string_content_type()); } -/* -symbol_exprt string_refinementt::symbol_content(const exprt & str) -{ - assert(str.type() == string_type); - assert(str.operands().size() == 2); - return to_symbol_expr(str.op1()); -} -*/ exprt string_refinementt::make_char(const exprt &chr) { debug() << "string_refinementt::make_char(" - << chr.get(ID_identifier) << ")" << eom; + << pretty_short(chr) << ")" << eom; assert(is_unrefined_char_type(chr.type())); symbol_exprt c = fresh_symbol("char", char_type); refined_char[chr] = c; return c; } +// Nothing particular is done there for now void string_refinementt::post_process() -{ - +{ debug() << "string_refinementt::post_process()" << eom; SUB::post_process(); } -void pretty_short(std::ostream & out, exprt expr) { - if(expr.get(ID_identifier) != "") - out << expr.get(ID_identifier); - else if (expr.operands().size() > 0) - for (int i =0; i 1) { - pretty_short(debug(), expr.op0()); - debug() << " == "; - pretty_short(debug(), expr.op1()); - } else - pretty_short(debug(), expr); - debug() << ")" << eom; - const typet &type=ns.follow(expr.lhs().type()); if(expr.lhs().id()==ID_symbol && @@ -257,9 +214,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) //exprt str = make_string(expr.lhs()); const bvt &bv=convert_bv(expr.rhs()); - debug() << "map.set_literals: " << identifier << " --> "; - pretty_short(debug(),expr.rhs()); - debug() << eom; refined_string[expr.lhs()] = expr.rhs();// not really useful map.set_literals(identifier, get_string_type(), bv); if(freeze_all) set_frozen(bv); @@ -277,35 +231,27 @@ bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); - debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; - if (is_unrefined_string_type(type)) { bvt bv; bv.resize(get_string_width()); map.get_literals(identifier, string_type, get_string_width(), bv); - //convert_bv();//make_string(expr)); - //debug() << "map.set_literals " << identifier << eom; - //map.set_literals(identifier, type, ret); return bv; } else if (is_unrefined_char_type(expr.type())) { + debug() << "string_refinementt::convert_symbol of char unimplemented" << eom; bvt ret = convert_bv(make_char(expr)); - //debug() << "map.set_literals " << identifier << eom; - //map.set_literals(identifier, type, ret); return ret; - } else - { + } else return SUB::convert_symbol(expr); - } } - +// This does nothing special bvt string_refinementt::convert_struct(const struct_exprt &expr) { - //if (is_unrefined_string_type(expr.type()) || is_unrefined_char_type(expr.type())) { return bvt(); } else { + debug() << "string_refinementt::convert_struct(" + << pretty_short(expr) << eom; return SUB::convert_struct(expr); - //} } @@ -316,8 +262,8 @@ bvt string_refinementt::convert_function_application( if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinementt::convert_function_application" - << "({id = " << id <<"})" << eom; + debug() << "string_refinementt::convert_function_application(" + << id << ")" << eom; if (id == string_literal_func) { return convert_string_literal(expr); } else if (id == char_literal_func) { @@ -344,7 +290,6 @@ bvt string_refinementt::convert_function_application( return SUB::convert_function_application(expr); } - void string_refinementt::check_SAT() { SUB::check_SAT(); @@ -356,25 +301,6 @@ void string_refinementt::check_SAT() } } - -bool string_refinementt::is_unrefined_string_type(const typet &type) -{ - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_string"); - } - return false; -} - -bool string_refinementt::is_unrefined_char_type(const typet &type) -{ - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_char"); - } - return false; -} - bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) { bvt ret; @@ -387,6 +313,11 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) return ret; } +void string_refinementt::add_lemma(const exprt &lemma) +{ + prop.l_set_to_true(convert(lemma)); + cur.push_back(lemma); +} bvt string_refinementt::convert_string_equal( @@ -436,15 +367,13 @@ bvt string_refinementt::convert_string_equal( bvt string_refinementt::convert_string_length( const function_application_exprt &f) { - //bvt bv; const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string length? - debug() << "in string_refinementt::convert_string_length("; - pretty_short(debug(),args[0]); - debug() << " ) " << eom; + debug() << "string_refinementt::convert_string_length(" + << pretty_short(args[0]) << " ) " << eom; + bvt str = convert_bv(args[0]); bvt bv = bv_length(str); - // bv = convert_bv(length); return bv; } @@ -457,6 +386,10 @@ bvt string_refinementt::convert_string_concat( const exprt &s1 = args[0]; const exprt &s2 = args[1]; + + debug() << "string_refinementt::convert_string_length(" + << pretty_short(s1) << ", " << pretty_short(s2) << ") " << eom; + exprt str = make_string(f); exprt s1string = make_string(s1); exprt s2string = make_string(s2); @@ -638,27 +571,29 @@ bvt string_refinementt::convert_string_literal( const exprt &s = arg.op0().op0().op0(); irep_idt sval = to_string_constant(s).get_value(); + + debug() << "string_refinementt::convert_string_literal(" + << sval << ")" << eom; + exprt str = make_string(f); bvt bv_str = convert_bv(str); bvt content = bv_content(bv_str); - /* for (std::size_t i = 0; i < sval.size(); ++i) { std::string idx_binary = integer2binary(i,string_length_width); constant_exprt idx(idx_binary, index_type); std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content, idx), c); + equal_exprt lemma(index_exprt(symbol_content(str), idx), c); add_lemma(lemma); } - */ std::string s_length_binary = integer2binary(unsigned(sval.size()),32); exprt s_length = constant_exprt(s_length_binary, get_string_length_type()); exprt length = expr_length(str); equal_exprt lemma(length,s_length); - debug() << "string_refinementt::convert_string_literal adds length constraint : " << length.get(ID_identifier) << " == " << s_length.get(ID_value) << eom; + add_lemma(lemma); return bv_str; @@ -747,11 +682,6 @@ bvt string_refinementt::convert_string_char_set( } -void string_refinementt::add_lemma(const exprt &lemma) -{ - prop.l_set_to_true(convert(lemma)); - cur.push_back(lemma); -} void string_refinementt::add_instantiations(bool first) @@ -804,11 +734,12 @@ bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver - debug() << "string_refinementt::check_axioms: ==========================================================" << eom; - debug() << "string_refinementt::check_axioms: build the interpretation from the model of the prop_solver" << eom; + debug() << "string_refinementt::check_axioms: ===============" + << "===========================================" << eom; + debug() << "string_refinementt::check_axioms: build the" + << " interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; - for (expr_mapt::iterator it = refined_string.begin(), end = refined_string.end(); it != end; ++it) { const exprt &refined = it->second; @@ -819,20 +750,23 @@ bool string_refinementt::check_axioms() exprt arr = get_array(econtent, len); fmodel[elength] = len; fmodel[econtent] = arr; - debug() << "check_axioms adds to the model:" << it->first.get(ID_identifier) << " -> " << arr.get(ID_identifier) << " [length=" << len.pretty() /*get(ID_value)*/ << "] "; + debug() << "check_axioms adds to the model:" + << pretty_short(it->first) << " -> " << pretty_short(arr) + << " [length=" << len.pretty() /*get(ID_value)*/ << "] "; print_array(debug(), arr); debug() << eom; } - /* for (expr_mapt::iterator it = refined_char.begin(), end = refined_char.end(); it != end; ++it) { const exprt &refined = it->second; exprt chr = get(refined); fmodel[refined] = chr; - debug() << "check_axioms adds to the model:" << it->first.get(ID_identifier) << " -> " << refined.get(ID_identifier) << " -> " << chr.get(ID_value) << eom; + debug() << "check_axioms adds to the model:" << pretty_short(it->first) + << " -> " << refined.get(ID_identifier) + << " -> " << chr.get(ID_value) << eom; } - */ + std::vector< std::pair > violated; for (size_t i = 0; i < string_axioms.size(); ++i) { @@ -1110,9 +1044,9 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { - debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) << "," << size.get(ID_value) << ")" << eom; + debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) + << "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); - //expect(val.id() == "array-list", "unable to get array-list value"); if(val.id() == "array-list") { exprt ret = @@ -1133,8 +1067,5 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) << val.pretty() << eom; return arr; } - } - - diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 85f1a697c30..caa912753e4 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -40,7 +40,7 @@ class string_refinementt: public bv_refinementt inline size_t get_char_width() { return to_bitvector_type(char_type).get_width();} inline size_t get_string_length_width() - { return to_bitvector_type(get_string_length_type()).get_width();} + { return boolbv_width(get_string_length_type());} inline size_t get_string_width() { return boolbv_width(string_type);} @@ -125,10 +125,14 @@ class string_refinementt: public bv_refinementt // Get the expression corresponding to the content of a string exprt expr_content(const exprt &str); - bvt bv_length(bvt struct_bv); - bvt bv_content(bvt struct_bv); + inline bvt bv_length(bvt string_bv) + { return bv_component(string_bv, "length",get_string_length_type()); } + + inline bvt bv_content(bvt string_bv) + { return bv_component(string_bv, "content",get_string_content_type()); } + //symbol_exprt symbol_length(const exprt & str); - //symbol_exprt symbol_content(const exprt & str); + symbol_exprt symbol_content(const exprt & str); // Get a model of the given array @@ -164,6 +168,9 @@ class string_refinementt: public bv_refinementt //expr_mapt length2string; //expr_mapt string2array; +private: + bvt bv_component(const bvt & struct_bv, const std::string & name, const typet & subtype); + }; #endif From 4d0f0c3ff9bae6b12e186d0846857461404c4091 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 9 Aug 2016 17:42:44 +0100 Subject: [PATCH 031/221] better structure for the code of string expressions --- src/solvers/refinement/string_refinement.cpp | 311 +++++++++++++------ src/solvers/refinement/string_refinement.h | 108 +++++-- 2 files changed, 296 insertions(+), 123 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 6ae1c6190ab..5b96dcaaf0b 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -32,6 +32,9 @@ std::string pretty_short(exprt expr) { } else return expr.pretty(); } +// associate a string to symbols +std::map symbol_to_string; + // Defines the type of strings that will be used by our refinement typet make_string_type(const typet & index_type, const typet & char_type) { @@ -52,6 +55,12 @@ typet make_string_type(const typet & index_type, const typet & char_type) return s; } +string_ref_typet::string_ref_typet() { + index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); + char_type = unsignedbv_typet(CHAR_WIDTH); + string_type = make_string_type(index_type,char_type); +} + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { @@ -66,11 +75,11 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; - next_symbol_id = 1; - - index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); - char_type = unsignedbv_typet(CHAR_WIDTH); - string_type = make_string_type(index_type,char_type); + //next_symbol_id = 1; + index_type = string_type.get_index_type(); + char_type = string_type.get_char_type(); + char_width = boolbv_width(string_type.get_char_type()); + string_length_width = boolbv_width(string_type.get_length_type()); } string_refinementt::~string_refinementt() @@ -95,6 +104,8 @@ bool string_refinementt::is_unrefined_char_type(const typet &type) return false; } +unsigned string_refinementt::next_symbol_id = 1; + symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, const typet &tp) { @@ -105,37 +116,117 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -// the argument of make_string is probably not useful apart from debugging -exprt string_refinementt::make_string(const exprt &str) +string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { - debug() << "string_refinementt::make_string(" - << pretty_short(str) << ")" << eom; - assert(is_unrefined_string_type(str.type())); + string_ref_typet t; + assert(length.type() == t.get_length_type()); + assert(content.type() == t.get_content_type()); + move_to_operands(length,content); +} - expr_mapt::iterator it = refined_string.find(str); - if (it != refined_string.end()) return it->second; - - symbol_exprt length = fresh_symbol("string_length",get_string_length_type()); - symbol_exprt content = fresh_symbol("string_content",get_string_content_type()); - - struct_exprt struct_string(string_type); - struct_string.move_to_operands(length,content); - refined_string[str] = struct_string; - return struct_string; +string_exprt::string_exprt() : struct_exprt(string_ref_typet()) +{ + string_ref_typet t; + symbol_exprt length = string_refinementt::fresh_symbol("string_length",t.get_length_type()); + symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); + move_to_operands(length,content); +} + + +string_exprt::string_exprt(symbol_exprt sym) : string_exprt() +{ + std::cout << "associating " << pretty_short(sym) << " to " << pretty_short(*this) << std::endl; + symbol_to_string[sym.get_identifier()] = *this; } -symbol_exprt string_refinementt::symbol_content(const exprt & str) +std::vector string_exprt::of_expr(exprt unrefined_string, size_t char_width, size_t string_length_width) { - assert(str.type() == string_type); - assert(str.operands().size() == 2); - return to_symbol_expr(str.op1()); + std::cout << "string_exprt::of_expr(" << pretty_short(unrefined_string) << ")"<< std::endl; + if(unrefined_string.id()==ID_function_application) + return of_function_application(to_function_application_expr(unrefined_string),char_width, string_length_width); + else if(unrefined_string.id()==ID_symbol) { + return of_symbol(to_symbol_expr(unrefined_string)); + } + else + throw "string_exprt of something else than function application not implemented"; +} + +std::vector string_exprt::of_symbol(const symbol_exprt & expr) { + std::vector lemmas; + string_exprt s = symbol_to_string[expr.get_identifier()]; + std::cout << "string_exprt::of_symbol " << pretty_short(expr) << " gives " << s.pretty() << std::endl; + lemmas.push_back(equal_exprt(s.content(),content())); + lemmas.push_back(equal_exprt(s.length(),length())); + return lemmas; +} + +std::vector string_exprt::of_function_application(const function_application_exprt & expr, size_t char_width, size_t string_length_width) +{ + const exprt &name = expr.function(); + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + std::cout << "string_exprt::of_function_application(" + << id << ")" << std::endl; + if (id == "__CPROVER_uninterpreted_string_literal") { + return of_string_literal(expr, char_width, string_length_width); + } else if (id == "__CPROVER_uninterpreted_strcat") { + return of_string_concat(expr); + } else if (id == "__CPROVER_uninterpreted_substring") { + return of_string_substring(expr); + } + } + throw "non string function"; +} + +std::vector string_exprt::of_string_literal(const function_application_exprt &f, size_t char_width, size_t string_length_width) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); //bad args to string literal? + const exprt &arg = args[0]; + std::vector lemmas; + + assert (arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? + + const exprt &s = arg.op0().op0().op0(); + irep_idt sval = to_string_constant(s).get_value(); + + // debug() << + std::cout << "string_exprtt::convert_string_literal(" << sval << ")" << std::endl; + + for (std::size_t i = 0; i < sval.size(); ++i) { + std::string idx_binary = integer2binary(i,string_length_width); + constant_exprt idx(idx_binary, string_ref_typet().get_index_type()); + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,string_ref_typet().get_char_type()); + equal_exprt lemma(index_exprt(content(), idx), c); + lemmas.push_back(lemma); + } + + std::string s_length_binary = integer2binary(unsigned(sval.size()),32); + exprt s_length = constant_exprt(s_length_binary, string_ref_typet().get_length_type()); + equal_exprt lemma(length(),s_length); + lemmas.push_back(lemma); + return lemmas; } +std::vector string_exprt::of_string_concat(const function_application_exprt &expr) +{ + throw "of_string_concat: not implemented"; +} +std::vector string_exprt::of_string_substring(const function_application_exprt &expr) +{ + throw "of_string_substring: not implemented"; +} + +/* exprt string_refinementt::expr_length(const exprt & str) { assert(str.type() == string_type); - member_exprt m (str,"length",get_string_length_type()); + member_exprt m (str,"length",string_type.get_length_type()); return m; } @@ -174,16 +265,14 @@ bvt string_refinementt::bv_component(const bvt & struct_bv, const std::string & exprt string_refinementt::expr_content(const exprt & str) { assert(str.type() == string_type); - return member_exprt(str,"content",get_string_content_type()); + return member_exprt(str,"content",string_type.get_content_type()); } - +*/ exprt string_refinementt::make_char(const exprt &chr) { - debug() << "string_refinementt::make_char(" - << pretty_short(chr) << ")" << eom; - assert(is_unrefined_char_type(chr.type())); - symbol_exprt c = fresh_symbol("char", char_type); + assert(string_refinementt::is_unrefined_char_type(chr.type())); + symbol_exprt c = string_refinementt::fresh_symbol("char", string_ref_typet().get_char_type()); refined_char[chr] = c; return c; } @@ -209,15 +298,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type.id()!=ID_bool) { if(is_unrefined_string_type(type)) { - const irep_idt &identifier = - to_symbol_expr(expr.lhs()).get_identifier(); - //exprt str = make_string(expr.lhs()); - - const bvt &bv=convert_bv(expr.rhs()); - refined_string[expr.lhs()] = expr.rhs();// not really useful - map.set_literals(identifier, get_string_type(), bv); - if(freeze_all) set_frozen(bv); - + symbol_exprt sym = to_symbol_expr(expr.lhs()); + make_string(sym,expr.rhs()); return false; } else @@ -319,6 +401,29 @@ void string_refinementt::add_lemma(const exprt &lemma) cur.push_back(lemma); } +void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) +{ + string_exprt s(sym); + debug() << "make_string of symbol " << pretty_short(sym) << eom; + std::vector lemmas = s.of_expr(str,char_width,string_length_width); + for(std::vector::iterator it = lemmas.begin(); it != lemmas.end(); it++) + { + debug() << "adding lemma " << it->pretty() << eom; + add_lemma(*it); + } +} + +string_exprt string_refinementt::make_string(const exprt & str) +{ + string_exprt s; + std::vector lemmas = s.of_expr(str,char_width,string_length_width); + for(std::vector::iterator it = lemmas.begin(); it != lemmas.end(); it++) + { + debug() << "adding lemma " << it->pretty() << eom; + add_lemma(*it); + } + return s; +} bvt string_refinementt::convert_string_equal( const function_application_exprt &f) @@ -332,12 +437,12 @@ bvt string_refinementt::convert_string_equal( const exprt &s1 = args[0]; const exprt &s2 = args[1]; - exprt s1string = make_string(s1); - exprt s2string = make_string(s2); - exprt s1len = expr_length(s1string); - exprt s1arr = expr_content(s1string); - exprt s2len = expr_length(s2string); - exprt s2arr = expr_content(s2string); + string_exprt s1string = make_string(s1); + string_exprt s2string = make_string(s2); + exprt s1len = s1string.length(); + exprt s1arr = s1string.content(); + exprt s2len = s2string.length(); + exprt s2arr = s2string.content(); symbol_exprt witness = fresh_symbol("index", index_type); @@ -372,8 +477,9 @@ bvt string_refinementt::convert_string_length( debug() << "string_refinementt::convert_string_length(" << pretty_short(args[0]) << " ) " << eom; - bvt str = convert_bv(args[0]); - bvt bv = bv_length(str); + string_exprt str = make_string(args[0]); + exprt length = str.length(); + bvt bv = convert_bv(length); return bv; } @@ -390,15 +496,15 @@ bvt string_refinementt::convert_string_concat( debug() << "string_refinementt::convert_string_length(" << pretty_short(s1) << ", " << pretty_short(s2) << ") " << eom; - exprt str = make_string(f); - exprt s1string = make_string(s1); - exprt s2string = make_string(s2); - exprt len = expr_length(f); - exprt s1len = expr_length(s1string); - exprt s2len = expr_length(s2string); - exprt arr = expr_content(str); - exprt s1arr = expr_content(s1string); - exprt s2arr = expr_content(s2string); + string_exprt str = make_string(f); + string_exprt s1string = make_string(s1); + string_exprt s2string = make_string(s2); + exprt len = str.length(); + exprt s1len = s1string.length(); + exprt s2len = s2string.length(); + exprt arr = str.content(); + exprt s1arr = s1string.content(); + exprt s2arr = s2string.content(); bvt bv = convert_bv(str); equal_exprt lemma1(len, plus_exprt(s1len, s2len)); @@ -438,12 +544,12 @@ bvt string_refinementt::convert_string_substring( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 3); // bad args to string substring? - exprt str = make_string(f); - exprt len = expr_length(str); - exprt arr = expr_content(str); - exprt arg_str = make_string(args[0]); - exprt arg_len = expr_length(arg_str); - exprt arg_arr = expr_content(arg_str); + string_exprt str = make_string(f); + exprt len = str.length(); + exprt arr = str.content(); + string_exprt arg_str = make_string(args[0]); + exprt arg_len = arg_str.length(); + exprt arg_arr = arg_str.content(); typecast_exprt i(args[1], index_type); typecast_exprt j(args[2], index_type); bvt bv = convert_bv(arr); @@ -477,12 +583,12 @@ bvt string_refinementt::convert_string_is_prefix( symbol_exprt isprefix = fresh_symbol("isprefix"); - exprt s0str = make_string(args[0]); - exprt s0len = expr_length(s0str); - exprt s0arr = expr_content(s0str); - exprt s1str = make_string(args[1]); - exprt s1len = expr_length(s1str); - exprt s1arr = expr_content(s1str); + string_exprt s0str = make_string(args[0]); + exprt s0len = s0str.length(); + exprt s0arr = s0str.content(); + string_exprt s1str = make_string(args[1]); + exprt s1len = s1str.length(); + exprt s1arr = s1str.content(); bvt bv = convert_bool_bv(isprefix, f); implies_exprt lemma1(isprefix, binary_relation_exprt(s0len, ID_ge, s1len)); @@ -519,12 +625,12 @@ bvt string_refinementt::convert_string_is_suffix( symbol_exprt issuffix = fresh_symbol("issuffix"); bvt bv = convert_bool_bv(issuffix, f); - exprt s0 = make_string(args[0]); - exprt s0len = expr_length(s0); - exprt s0arr = expr_content(s0); - exprt s1 = make_string(args[1]); - exprt s1len = expr_length(s1); - exprt s1arr = expr_content(s1); + string_exprt s0 = make_string(args[0]); + exprt s0len = s0.length(); + exprt s0arr = s0.content(); + string_exprt s1 = make_string(args[1]); + exprt s1len = s1.length(); + exprt s1arr = s1.content(); implies_exprt lemma1(issuffix, binary_relation_exprt(s0len, ID_ge, s1len)); add_lemma(lemma1); @@ -561,8 +667,7 @@ bvt string_refinementt::convert_string_literal( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string literal? const exprt &arg = args[0]; - size_t char_width = get_char_width(); - size_t string_length_width = get_string_length_width(); + assert (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && @@ -572,11 +677,12 @@ bvt string_refinementt::convert_string_literal( const exprt &s = arg.op0().op0().op0(); irep_idt sval = to_string_constant(s).get_value(); - debug() << "string_refinementt::convert_string_literal(" - << sval << ")" << eom; + debug() << "Warning : string_refinementt::convert_string_literal(" + << sval << ") should not be used anymore" << eom; exprt str = make_string(f); bvt bv_str = convert_bv(str); + /* bvt content = bv_content(bv_str); @@ -590,12 +696,12 @@ bvt string_refinementt::convert_string_literal( } std::string s_length_binary = integer2binary(unsigned(sval.size()),32); - exprt s_length = constant_exprt(s_length_binary, get_string_length_type()); + exprt s_length = constant_exprt(s_length_binary, string_type.get_length_type()); exprt length = expr_length(str); equal_exprt lemma(length,s_length); add_lemma(lemma); - + */ return bv_str; } @@ -629,15 +735,32 @@ bvt string_refinementt::convert_char_literal( bvt string_refinementt::convert_string_char_at( const function_application_exprt &f) { - bvt bv; + debug() << "string_refinementt::convert_char_at" << eom; + //bvt bv; const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments exprt chr = make_char(f); - exprt str = make_string(args[0]); - exprt content = expr_content(str); + + // copied from bvt boolbvt::convert_index(const index_exprt &expr) + bvt bv; + /* + std::size_t width=get_char_width(); + bv.resize(width); + + const array_typet &array_type= string_type.get_content_type(); + + for(std::size_t i=0; isecond; - const exprt &econtent = expr_content(refined); - const exprt &elength = expr_length(refined); + string_exprt refined = to_string_expr(it->second); + const exprt &econtent = refined.content(); + const exprt &elength = refined.length(); exprt len = get(elength); exprt arr = get_array(econtent, len); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index caa912753e4..6e0b3a09207 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -14,6 +14,65 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include + +// Internal type used for strings +class string_ref_typet : public typet { +public: + string_ref_typet(); + + inline typet get_string_type() { return string_type; }; + // Type of characters + inline typet get_char_type() { return char_type; }; + // Type of character indexes in the string + inline typet get_index_type() { return index_type; }; + // Type to encode the length of a string + inline typet get_length_type() + { return to_struct_type(string_type).components()[0].type();} + // Type for the content (list of characters) of a string + inline array_typet get_content_type() + { return to_array_type((to_struct_type(string_type)).components()[1].type());} + + +private: + typet index_type; + typet char_type; + typet string_type; + +}; + + +class string_exprt : public struct_exprt { +public: + string_exprt(); + string_exprt(exprt length, exprt content); + string_exprt(symbol_exprt sym); + + // returns a list of lemmas which should hold + std::vector of_expr(exprt unrefined_string, size_t char_width, size_t string_length_width); + std::vector of_function_application(const function_application_exprt &expr, size_t char_width, size_t string_length_width); + std::vector of_symbol(const symbol_exprt &expr); + std::vector of_string_literal(const function_application_exprt &expr, size_t char_width, size_t string_length_width); + std::vector of_string_concat(const function_application_exprt &expr); + std::vector of_string_substring(const function_application_exprt &expr); + + inline exprt length() { return op0();} + inline exprt content() { return op1();} + + friend inline string_exprt &to_string_expr(exprt expr) + { + assert(expr.id()==ID_struct); + return static_cast(expr); + } + + + //private: + +}; + +string_exprt &to_string_expr(exprt expr); + + + class string_refinementt: public bv_refinementt { public: @@ -25,30 +84,25 @@ class string_refinementt: public bv_refinementt typedef bv_refinementt SUB; - // Internal type used for strings - inline typet get_string_type() { return string_type; }; - // Type of characters - inline typet get_char_type() { return char_type; }; - // Type of character indexes in the string - inline typet get_index_type() { return index_type; }; - // Type to encode the length of a string - inline typet get_string_length_type() - { return (to_struct_type(string_type)).components()[0].type();} - // Type for the content (list of characters) of a string - inline typet get_string_content_type() - { return (to_struct_type(string_type)).components()[1].type();} - inline size_t get_char_width() - { return to_bitvector_type(char_type).get_width();} - inline size_t get_string_length_width() - { return boolbv_width(get_string_length_type());} + inline size_t get_char_width() {return char_width;} + inline size_t get_string_length_width() {return string_length_width;} inline size_t get_string_width() { return boolbv_width(string_type);} + static bool is_unrefined_string_type(const typet &type); + static bool is_unrefined_char_type(const typet &type); + // Generate a new symbol of the given type tp with a prefix + static symbol_exprt fresh_symbol(const irep_idt &prefix, + const typet &tp=bool_typet()); + static unsigned next_symbol_id; + private: + string_ref_typet string_type; typet index_type; typet char_type; - typet string_type; + size_t char_width; + size_t string_length_width; protected: struct string_axiomt @@ -79,9 +133,6 @@ class string_refinementt: public bv_refinementt const function_application_exprt &expr); virtual void check_SAT(); - bool is_unrefined_string_type(const typet &type); - bool is_unrefined_char_type(const typet &type); - bvt convert_bool_bv(const exprt &boole, const exprt &orig); // The following functions convert different string functions to @@ -108,13 +159,13 @@ class string_refinementt: public bv_refinementt const exprt &val); void add_lemma(const exprt &lemma); - // Generate a new symbol of the given type tp with a prefix - symbol_exprt fresh_symbol(const irep_idt &prefix, - const typet &tp=bool_typet()); + // Gives the string corresponding to an expression - exprt make_string(const exprt &str); + string_exprt make_string(const exprt &str); + // Associate the string to the given symbol + void make_string(const symbol_exprt & sym, const exprt &str); // Gives the character corresponding to an expression exprt make_char(const exprt &chr); @@ -125,11 +176,13 @@ class string_refinementt: public bv_refinementt // Get the expression corresponding to the content of a string exprt expr_content(const exprt &str); + /* inline bvt bv_length(bvt string_bv) - { return bv_component(string_bv, "length",get_string_length_type()); } + { return bv_component(string_bv, "length",string_type.get_length_type()); } inline bvt bv_content(bvt string_bv) - { return bv_component(string_bv, "content",get_string_content_type()); } + { return bv_component(string_bv, "content",string_type.get_length_type()); } + */ //symbol_exprt symbol_length(const exprt & str); symbol_exprt symbol_content(const exprt & str); @@ -150,8 +203,6 @@ class string_refinementt: public bv_refinementt irep_idt string_is_suffix_func; irep_idt string_char_set_func; - - axiom_vect string_axioms; expr_sett strings; // gives the length and content symbols associated to a string symbol @@ -159,7 +210,6 @@ class string_refinementt: public bv_refinementt expr_mapt refined_char; expr_sett seen_instances; index_sett index_set; - unsigned next_symbol_id; std::vector cur; From 2675eafcb2a05439dddeebee8bbe6883a6e246e5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 10 Aug 2016 10:19:26 +0100 Subject: [PATCH 032/221] taking care of char expressions --- src/solvers/refinement/string_refinement.cpp | 146 +++++++++---------- src/solvers/refinement/string_refinement.h | 31 +--- 2 files changed, 81 insertions(+), 96 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 5b96dcaaf0b..ffaa30f6c43 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -24,41 +24,33 @@ std::string pretty_short(exprt expr) { std::ostringstream buf; if(expr.get(ID_identifier) != "") { buf << expr.get(ID_identifier); - return buf.str(); } else if (expr.operands().size() > 0) { for (int i =0; i symbol_to_string; -// Defines the type of strings that will be used by our refinement -typet make_string_type(const typet & index_type, const typet & char_type) -{ - // Type for strings that corresponds to : - // struct { index_type length; char_type * content } - struct_typet s; - s.components().resize(2); +string_ref_typet::string_ref_typet() : struct_typet() { + index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); + char_type = unsignedbv_typet(CHAR_WIDTH); - s.components()[0].set_name("length"); - s.components()[0].set_pretty_name("length"); - s.components()[0].type()=index_type; + components().resize(2); - array_typet char_array(char_type,infinity_exprt(index_type)); - s.components()[1].set_name("content"); - s.components()[1].set_pretty_name("content"); - s.components()[1].type()=char_array; - return s; -} + components()[0].set_name("length"); + components()[0].set_pretty_name("length"); + components()[0].type()=index_type; -string_ref_typet::string_ref_typet() { - index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); - char_type = unsignedbv_typet(CHAR_WIDTH); - string_type = make_string_type(index_type,char_type); + array_typet char_array(char_type,infinity_exprt(index_type)); + components()[1].set_name("content"); + components()[1].set_pretty_name("content"); + components()[1].type()=char_array; } string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): @@ -130,6 +122,7 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) symbol_exprt length = string_refinementt::fresh_symbol("string_length",t.get_length_type()); symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); + std::cout << " string_exprt() -> " << this->pretty(); } @@ -154,7 +147,8 @@ std::vector string_exprt::of_expr(exprt unrefined_string, size_t char_wid std::vector string_exprt::of_symbol(const symbol_exprt & expr) { std::vector lemmas; string_exprt s = symbol_to_string[expr.get_identifier()]; - std::cout << "string_exprt::of_symbol " << pretty_short(expr) << " gives " << s.pretty() << std::endl; + std::cout << "string_exprt::of_symbol(" << pretty_short(expr) + << ")" << std::endl; lemmas.push_back(equal_exprt(s.content(),content())); lemmas.push_back(equal_exprt(s.length(),length())); return lemmas; @@ -267,7 +261,6 @@ exprt string_refinementt::expr_content(const exprt & str) assert(str.type() == string_type); return member_exprt(str,"content",string_type.get_content_type()); } -*/ exprt string_refinementt::make_char(const exprt &chr) { @@ -276,6 +269,7 @@ exprt string_refinementt::make_char(const exprt &chr) refined_char[chr] = c; return c; } +*/ // Nothing particular is done there for now void string_refinementt::post_process() @@ -302,8 +296,14 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) make_string(sym,expr.rhs()); return false; } - else - return SUB::boolbv_set_equality_to_true(expr); + else if(is_unrefined_char_type(type)) { + const bvt &bv1=convert_bv(expr.rhs()); + symbol_exprt sym = to_symbol_expr(expr.lhs()); + const irep_idt &identifier = sym.get_identifier(); + map.set_literals(identifier, char_type, bv1); + if(freeze_all) set_frozen(bv1); + return false; + } else return SUB::boolbv_set_equality_to_true(expr); } return true; @@ -313,19 +313,32 @@ bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); + if(identifier.empty()) + throw "string_refinementt::convert_symbol got empty identifier"; + debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; if (is_unrefined_string_type(type)) { - bvt bv; - bv.resize(get_string_width()); - map.get_literals(identifier, string_type, get_string_width(), bv); + debug() << "string_refinementt::convert_symbol of unrefined string" + << " (this can happen because of boolbvt::convert_equality)" + << eom; + string_exprt str = string_exprt(to_symbol_expr(expr)); + debug() << "convert_bv(" << str.pretty() << eom; + bvt bv = convert_bv(str); return bv; } else if (is_unrefined_char_type(expr.type())) { - debug() << "string_refinementt::convert_symbol of char unimplemented" << eom; - bvt ret = convert_bv(make_char(expr)); - return ret; - } else - return SUB::convert_symbol(expr); + bvt bv; + bv.resize(char_width); + map.get_literals(identifier, char_type, char_width, bv); + + forall_literals(it, bv) + if(it->var_no()>=prop.no_variables() && !it->is_constant()) + { + error() << identifier << eom; + assert(false); + } + return bv; + } else return SUB::convert_symbol(expr); } // This does nothing special @@ -397,31 +410,35 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { + if(lemma.operands().size() == 2) + { + debug() << "adding lemma " << pretty_short(lemma.op0()) + << " = " << pretty_short(lemma.op1()) << eom; + } prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } +void string_refinementt::add_lemmas(std::vector & lemmas) +{ + std::vector::iterator it; + for(it = lemmas.begin(); it != lemmas.end(); it++) + add_lemma(*it); +} + void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { string_exprt s(sym); debug() << "make_string of symbol " << pretty_short(sym) << eom; std::vector lemmas = s.of_expr(str,char_width,string_length_width); - for(std::vector::iterator it = lemmas.begin(); it != lemmas.end(); it++) - { - debug() << "adding lemma " << it->pretty() << eom; - add_lemma(*it); - } + add_lemmas(lemmas); } string_exprt string_refinementt::make_string(const exprt & str) { string_exprt s; std::vector lemmas = s.of_expr(str,char_width,string_length_width); - for(std::vector::iterator it = lemmas.begin(); it != lemmas.end(); it++) - { - debug() << "adding lemma " << it->pretty() << eom; - add_lemma(*it); - } + add_lemmas(lemmas); return s; } @@ -679,6 +696,7 @@ bvt string_refinementt::convert_string_literal( debug() << "Warning : string_refinementt::convert_string_literal(" << sval << ") should not be used anymore" << eom; + throw "string_refinementt::convert_string_literal"; exprt str = make_string(f); bvt bv_str = convert_bv(str); @@ -726,7 +744,7 @@ bvt string_refinementt::convert_char_literal( size_t char_width = get_char_width(); std::string binary=integer2binary(unsigned(sval[0]), char_width); constant_exprt e(binary, char_type); - refined_char[f] = e; + //refined_char[f] = e; bvt bv = convert_bv(e); return bv; } @@ -735,38 +753,17 @@ bvt string_refinementt::convert_char_literal( bvt string_refinementt::convert_string_char_at( const function_application_exprt &f) { - debug() << "string_refinementt::convert_char_at" << eom; - //bvt bv; const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments + debug() << "string_refinementt::convert_char_at(" + << pretty_short(args[0]) << "," + << pretty_short(args[1]) << ")" << eom; - exprt chr = make_char(f); - - // copied from bvt boolbvt::convert_index(const index_exprt &expr) - bvt bv; - /* - std::size_t width=get_char_width(); - bv.resize(width); - - const array_typet &array_type= string_type.get_content_type(); - - for(std::size_t i=0; i " << char_at.pretty() << eom; + bvt bv = convert_bv(char_at); return bv; } @@ -863,6 +860,8 @@ bool string_refinementt::check_axioms() << " interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; + debug() << "We should look at the strings in symbol_to_string" << eom; + /* for (expr_mapt::iterator it = refined_string.begin(), end = refined_string.end(); it != end; ++it) { string_exprt refined = to_string_expr(it->second); @@ -875,7 +874,7 @@ bool string_refinementt::check_axioms() fmodel[econtent] = arr; debug() << "check_axioms adds to the model:" << pretty_short(it->first) << " -> " << pretty_short(arr) - << " [length=" << len.pretty() /*get(ID_value)*/ << "] "; + << " [length=" << len.pretty() << "] "; print_array(debug(), arr); debug() << eom; } @@ -889,6 +888,7 @@ bool string_refinementt::check_axioms() << " -> " << refined.get(ID_identifier) << " -> " << chr.get(ID_value) << eom; } +*/ std::vector< std::pair > violated; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 6e0b3a09207..d098742bbfa 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -16,27 +16,25 @@ Author: Alberto Griggio, alberto.griggio@gmail.com // Internal type used for strings -class string_ref_typet : public typet { +class string_ref_typet : public struct_typet { public: string_ref_typet(); - inline typet get_string_type() { return string_type; }; // Type of characters inline typet get_char_type() { return char_type; }; // Type of character indexes in the string inline typet get_index_type() { return index_type; }; // Type to encode the length of a string inline typet get_length_type() - { return to_struct_type(string_type).components()[0].type();} + { return to_struct_type(*this).components()[0].type();} // Type for the content (list of characters) of a string inline array_typet get_content_type() - { return to_array_type((to_struct_type(string_type)).components()[1].type());} + { return to_array_type((to_struct_type(*this)).components()[1].type());} private: typet index_type; typet char_type; - typet string_type; }; @@ -63,10 +61,6 @@ class string_exprt : public struct_exprt { assert(expr.id()==ID_struct); return static_cast(expr); } - - - //private: - }; string_exprt &to_string_expr(exprt expr); @@ -158,13 +152,15 @@ class string_refinementt: public bv_refinementt exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); void add_lemma(const exprt &lemma); + void add_lemmas(std::vector & lemmas); - - // Gives the string corresponding to an expression + // Create a new string expression and add the necessary lemma + // to ensure its equal to the given string expression. string_exprt make_string(const exprt &str); - // Associate the string to the given symbol + // Same thing but associates the string to the given symbol instead + // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); // Gives the character corresponding to an expression @@ -205,22 +201,11 @@ class string_refinementt: public bv_refinementt axiom_vect string_axioms; expr_sett strings; - // gives the length and content symbols associated to a string symbol - expr_mapt refined_string; - expr_mapt refined_char; expr_sett seen_instances; index_sett index_set; std::vector cur; - // These are now unused: - //expr_mapt string2length; - //expr_mapt length2string; - //expr_mapt string2array; - -private: - bvt bv_component(const bvt & struct_bv, const std::string & name, const typet & subtype); - }; #endif From 453381d78c848d2d66b4c4963935231a402905b5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 10 Aug 2016 12:23:00 +0100 Subject: [PATCH 033/221] uniformisation of lemmas and axioms by putting them in a same class (string_axiomt) --- src/solvers/refinement/string_refinement.cpp | 286 +++++++++---------- src/solvers/refinement/string_refinement.h | 74 +++-- 2 files changed, 163 insertions(+), 197 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ffaa30f6c43..4721f2fc5fa 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -16,8 +16,10 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include -#define STRING_LENGTH_WIDTH 32 -#define CHAR_WIDTH 8 +// Types used in this refinement +unsignedbv_typet ref_char_typet(CHAR_WIDTH); +unsignedbv_typet ref_index_typet(INDEX_WIDTH); + // Succinct version of pretty() std::string pretty_short(exprt expr) { @@ -37,22 +39,35 @@ std::string pretty_short(exprt expr) { std::map symbol_to_string; -string_ref_typet::string_ref_typet() : struct_typet() { - index_type = unsignedbv_typet(STRING_LENGTH_WIDTH); - char_type = unsignedbv_typet(CHAR_WIDTH); +string_ref_typet::string_ref_typet() : struct_typet() { components().resize(2); components()[0].set_name("length"); components()[0].set_pretty_name("length"); - components()[0].type()=index_type; + components()[0].type()=ref_index_typet; - array_typet char_array(char_type,infinity_exprt(index_type)); + array_typet char_array(ref_char_typet,infinity_exprt(ref_index_typet)); components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; } +string_axiomt::string_axiomt(symbol_exprt index, exprt prem, exprt bod) +{ + idx = index; + premise = prem; + body = bod; + lit = nil_exprt(); +} + +string_axiomt::string_axiomt(exprt bod) +{ + premise = true_exprt(); + body = bod; + lit = nil_exprt(); +} + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { @@ -67,11 +82,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; - //next_symbol_id = 1; - index_type = string_type.get_index_type(); - char_type = string_type.get_char_type(); - char_width = boolbv_width(string_type.get_char_type()); - string_length_width = boolbv_width(string_type.get_length_type()); } string_refinementt::~string_refinementt() @@ -111,7 +121,7 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { string_ref_typet t; - assert(length.type() == t.get_length_type()); + assert(length.type() == ref_index_typet); assert(content.type() == t.get_content_type()); move_to_operands(length,content); } @@ -119,24 +129,21 @@ string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_re string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; - symbol_exprt length = string_refinementt::fresh_symbol("string_length",t.get_length_type()); + symbol_exprt length = string_refinementt::fresh_symbol("string_length",ref_index_typet); symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); - std::cout << " string_exprt() -> " << this->pretty(); } string_exprt::string_exprt(symbol_exprt sym) : string_exprt() { - std::cout << "associating " << pretty_short(sym) << " to " << pretty_short(*this) << std::endl; symbol_to_string[sym.get_identifier()] = *this; } -std::vector string_exprt::of_expr(exprt unrefined_string, size_t char_width, size_t string_length_width) +axiom_vect string_exprt::of_expr(exprt unrefined_string) { - std::cout << "string_exprt::of_expr(" << pretty_short(unrefined_string) << ")"<< std::endl; if(unrefined_string.id()==ID_function_application) - return of_function_application(to_function_application_expr(unrefined_string),char_width, string_length_width); + return of_function_application(to_function_application_expr(unrefined_string)); else if(unrefined_string.id()==ID_symbol) { return of_symbol(to_symbol_expr(unrefined_string)); } @@ -144,17 +151,15 @@ std::vector string_exprt::of_expr(exprt unrefined_string, size_t char_wid throw "string_exprt of something else than function application not implemented"; } -std::vector string_exprt::of_symbol(const symbol_exprt & expr) { - std::vector lemmas; +axiom_vect string_exprt::of_symbol(const symbol_exprt & expr) { + axiom_vect lemmas; string_exprt s = symbol_to_string[expr.get_identifier()]; - std::cout << "string_exprt::of_symbol(" << pretty_short(expr) - << ")" << std::endl; - lemmas.push_back(equal_exprt(s.content(),content())); - lemmas.push_back(equal_exprt(s.length(),length())); + lemmas.push_back(string_axiomt(equal_exprt(s.content(),content()))); + lemmas.push_back(string_axiomt(equal_exprt(s.length(),length()))); return lemmas; } -std::vector string_exprt::of_function_application(const function_application_exprt & expr, size_t char_width, size_t string_length_width) +axiom_vect string_exprt::of_function_application(const function_application_exprt & expr) { const exprt &name = expr.function(); if (name.id() == ID_symbol) { @@ -162,7 +167,7 @@ std::vector string_exprt::of_function_application(const function_applicat std::cout << "string_exprt::of_function_application(" << id << ")" << std::endl; if (id == "__CPROVER_uninterpreted_string_literal") { - return of_string_literal(expr, char_width, string_length_width); + return of_string_literal(expr); } else if (id == "__CPROVER_uninterpreted_strcat") { return of_string_concat(expr); } else if (id == "__CPROVER_uninterpreted_substring") { @@ -172,12 +177,12 @@ std::vector string_exprt::of_function_application(const function_applicat throw "non string function"; } -std::vector string_exprt::of_string_literal(const function_application_exprt &f, size_t char_width, size_t string_length_width) +axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string literal? const exprt &arg = args[0]; - std::vector lemmas; + axiom_vect lemmas; assert (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && @@ -191,27 +196,56 @@ std::vector string_exprt::of_string_literal(const function_application_ex std::cout << "string_exprtt::convert_string_literal(" << sval << ")" << std::endl; for (std::size_t i = 0; i < sval.size(); ++i) { - std::string idx_binary = integer2binary(i,string_length_width); - constant_exprt idx(idx_binary, string_ref_typet().get_index_type()); - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); - constant_exprt c(sval_binary,string_ref_typet().get_char_type()); + std::string idx_binary = integer2binary(i,INDEX_WIDTH); + constant_exprt idx(idx_binary, ref_index_typet); + std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); + constant_exprt c(sval_binary,ref_char_typet); equal_exprt lemma(index_exprt(content(), idx), c); - lemmas.push_back(lemma); + lemmas.push_back(string_axiomt(lemma)); } - std::string s_length_binary = integer2binary(unsigned(sval.size()),32); - exprt s_length = constant_exprt(s_length_binary, string_ref_typet().get_length_type()); - equal_exprt lemma(length(),s_length); - lemmas.push_back(lemma); + std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); + exprt s_length = constant_exprt(s_length_binary, ref_index_typet); + + lemmas.push_back(string_axiomt(equal_exprt(length(),s_length))); return lemmas; } -std::vector string_exprt::of_string_concat(const function_application_exprt &expr) + +axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) { - throw "of_string_concat: not implemented"; + axiom_vect axioms; + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string concat + + string_exprt s1,s2; + s1.of_expr(args[0]); + s2.of_expr(args[1]); + + equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); + axioms.push_back(string_axiomt(length_sum_lem)); + binary_relation_exprt lem1(length(), ID_ge, s1.length()); + axioms.push_back(string_axiomt(lem1)); + binary_relation_exprt lem2(length(), ID_ge, s2.length()); + axioms.push_back(string_axiomt(lem2)); + + symbol_exprt idx = string_refinementt::fresh_symbol("index", ref_index_typet); + + //string_axiomt a1(string_axioms.size()); + string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), + equal_exprt(index_exprt(s1.content(), idx), + index_exprt(content(), idx))); + axioms.push_back(a1); + + string_axiomt a2(idx, binary_relation_exprt(idx, ID_lt, s2.length()), + equal_exprt(index_exprt(s2.content(), idx), + index_exprt(content(), + plus_exprt(s1.length(), idx)))); + axioms.push_back(a2); + return axioms; } -std::vector string_exprt::of_string_substring(const function_application_exprt &expr) +axiom_vect string_exprt::of_string_substring(const function_application_exprt &expr) { throw "of_string_substring: not implemented"; } @@ -300,7 +334,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); - map.set_literals(identifier, char_type, bv1); + map.set_literals(identifier, ref_char_typet, bv1); if(freeze_all) set_frozen(bv1); return false; } else return SUB::boolbv_set_equality_to_true(expr); @@ -328,8 +362,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) return bv; } else if (is_unrefined_char_type(expr.type())) { bvt bv; - bv.resize(char_width); - map.get_literals(identifier, char_type, char_width, bv); + bv.resize(CHAR_WIDTH); + map.get_literals(identifier, ref_char_typet, CHAR_WIDTH, bv); forall_literals(it, bv) if(it->var_no()>=prop.no_variables() && !it->is_constant()) @@ -419,25 +453,31 @@ void string_refinementt::add_lemma(const exprt &lemma) cur.push_back(lemma); } -void string_refinementt::add_lemmas(std::vector & lemmas) +void string_refinementt::add_lemmas(axiom_vect & lemmas) { - std::vector::iterator it; + axiom_vect::iterator it; for(it = lemmas.begin(); it != lemmas.end(); it++) - add_lemma(*it); + { + // distinguished between lemmas that are not universaly quantified + if(!(it->is_quantified())) + add_lemma(it->body); + else + string_axioms.push_back(*it); + } } void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { string_exprt s(sym); debug() << "make_string of symbol " << pretty_short(sym) << eom; - std::vector lemmas = s.of_expr(str,char_width,string_length_width); + axiom_vect lemmas = s.of_expr(str); add_lemmas(lemmas); } string_exprt string_refinementt::make_string(const exprt & str) { string_exprt s; - std::vector lemmas = s.of_expr(str,char_width,string_length_width); + axiom_vect lemmas = s.of_expr(str); add_lemmas(lemmas); return s; } @@ -460,7 +500,8 @@ bvt string_refinementt::convert_string_equal( exprt s1arr = s1string.content(); exprt s2len = s2string.length(); exprt s2arr = s2string.content(); - + throw "string_refinementt::convert_string_equal not implemented"; + /* symbol_exprt witness = fresh_symbol("index", index_type); implies_exprt lemma1(eq, equal_exprt(s1len, s2len)); @@ -481,7 +522,7 @@ bvt string_refinementt::convert_string_equal( notequal_exprt(index_exprt(s1arr, witness), index_exprt(s2arr, witness))))); add_lemma(lemma2); - + */ return bv; } @@ -504,53 +545,9 @@ bvt string_refinementt::convert_string_length( bvt string_refinementt::convert_string_concat( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string concat - - const exprt &s1 = args[0]; - const exprt &s2 = args[1]; - - debug() << "string_refinementt::convert_string_length(" - << pretty_short(s1) << ", " << pretty_short(s2) << ") " << eom; - - string_exprt str = make_string(f); - string_exprt s1string = make_string(s1); - string_exprt s2string = make_string(s2); - exprt len = str.length(); - exprt s1len = s1string.length(); - exprt s2len = s2string.length(); - exprt arr = str.content(); - exprt s1arr = s1string.content(); - exprt s2arr = s2string.content(); + string_exprt str; + str.of_expr(f); bvt bv = convert_bv(str); - - equal_exprt lemma1(len, plus_exprt(s1len, s2len)); - add_lemma(lemma1); - - binary_relation_exprt lemma2(len, ID_ge, s1len); - add_lemma(lemma2); - - binary_relation_exprt lemma3(len, ID_ge, s2len); - add_lemma(lemma3); - - symbol_exprt idx = fresh_symbol("index", index_type); - - string_axiomt a1(string_axioms.size()); - a1.idx = idx; - a1.lit = nil_exprt(); - a1.premise = binary_relation_exprt(idx, ID_lt, s1len); - a1.body = equal_exprt(index_exprt(s1arr, idx), - index_exprt(arr, idx)); - string_axioms.push_back(a1); - - string_axiomt a2(string_axioms.size()); - a2.idx = idx; - a2.lit = nil_exprt(); - a2.premise = binary_relation_exprt(idx, ID_lt, s2len); - a2.body = equal_exprt(index_exprt(s2arr, idx), - index_exprt(arr, plus_exprt(s1len, idx))); - string_axioms.push_back(a2); - return bv; } @@ -567,10 +564,11 @@ bvt string_refinementt::convert_string_substring( string_exprt arg_str = make_string(args[0]); exprt arg_len = arg_str.length(); exprt arg_arr = arg_str.content(); - typecast_exprt i(args[1], index_type); - typecast_exprt j(args[2], index_type); + typecast_exprt i(args[1], ref_index_typet); + typecast_exprt j(args[2], ref_index_typet); bvt bv = convert_bv(arr); - exprt idx = fresh_symbol("index", index_type); + throw "string_refinementt::convert_string_substring unimplemented"; + /*exprt idx = fresh_symbol("index", index_type); string_axiomt a(string_axioms.size()); a.idx = idx; @@ -587,7 +585,7 @@ bvt string_refinementt::convert_string_substring( binary_relation_exprt lemma2(arg_len, ID_ge, len); add_lemma(lemma2); - + */ return bv; } @@ -607,7 +605,8 @@ bvt string_refinementt::convert_string_is_prefix( exprt s1len = s1str.length(); exprt s1arr = s1str.content(); bvt bv = convert_bool_bv(isprefix, f); - + throw "string_refinementt::convert_string_is_prefix unimplemented" ; + /* implies_exprt lemma1(isprefix, binary_relation_exprt(s0len, ID_ge, s1len)); add_lemma(lemma1); @@ -628,7 +627,7 @@ bvt string_refinementt::convert_string_is_prefix( notequal_exprt(index_exprt(s1arr, witness), index_exprt(s0arr, witness))))); add_lemma(lemma2); - + */ return bv; } @@ -642,6 +641,8 @@ bvt string_refinementt::convert_string_is_suffix( symbol_exprt issuffix = fresh_symbol("issuffix"); bvt bv = convert_bool_bv(issuffix, f); + throw "string_refinementt::convert_string_is_suffix unimplemented"; + /* string_exprt s0 = make_string(args[0]); exprt s0len = s0.length(); exprt s0arr = s0.content(); @@ -674,7 +675,7 @@ bvt string_refinementt::convert_string_is_suffix( plus_exprt(witness, minus_exprt(s0len, s1len))))))); add_lemma(lemma2); - + */ return bv; } @@ -741,9 +742,8 @@ bvt string_refinementt::convert_char_literal( irep_idt sval = s.get_value(); assert(sval.size() == 1); //the argument to char literal should be a string of size 1 - size_t char_width = get_char_width(); - std::string binary=integer2binary(unsigned(sval[0]), char_width); - constant_exprt e(binary, char_type); + std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); + constant_exprt e(binary, ref_char_typet); //refined_char[f] = e; bvt bv = convert_bv(e); return bv; @@ -760,7 +760,7 @@ bvt string_refinementt::convert_string_char_at( << pretty_short(args[1]) << ")" << eom; string_exprt str = make_string(args[0]); - typecast_exprt pos(args[1], index_type); + typecast_exprt pos(args[1], ref_index_typet); index_exprt char_at(str.content(), pos); debug() << " --> " << char_at.pretty() << eom; bvt bv = convert_bv(char_at); @@ -782,9 +782,9 @@ bvt string_refinementt::convert_string_char_set( string_exprt sarg = make_string(args[0]); exprt sarr = sarg.content(); exprt slen = sarg.length(); - typecast_exprt idx(args[1], index_type); + typecast_exprt idx(args[1], ref_index_typet); - symbol_exprt c = fresh_symbol("char", char_type); + symbol_exprt c = fresh_symbol("char", ref_char_typet); bvt bva = convert_bv(args[2]); bvt bvc = convert_bv(c); bva.resize(bvc.size(), const_literal(false)); @@ -833,23 +833,6 @@ void string_refinementt::add_instantiations(bool first) } } -std::ostream & print_array(std::ostream & out, const exprt &val) { - exprt e = val; - while(e.operands().size() == 3) { - exprt tmp_index = e.op1(); - exprt tmp_value = e.op2(); - irep_idt val; - if(e.operands().size() == 1) - val = tmp_value.op0().get(ID_value); - else - val = tmp_value.get(ID_value); - - out << tmp_index.get(ID_value) << "->" << val << " ; "; - e = e.op0(); - } - return out; -} - bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver @@ -861,34 +844,21 @@ bool string_refinementt::check_axioms() replace_mapt fmodel; debug() << "We should look at the strings in symbol_to_string" << eom; - /* - for (expr_mapt::iterator it = refined_string.begin(), - end = refined_string.end(); it != end; ++it) { - string_exprt refined = to_string_expr(it->second); - const exprt &econtent = refined.content(); - const exprt &elength = refined.length(); - - exprt len = get(elength); - exprt arr = get_array(econtent, len); - fmodel[elength] = len; - fmodel[econtent] = arr; - debug() << "check_axioms adds to the model:" - << pretty_short(it->first) << " -> " << pretty_short(arr) - << " [length=" << len.pretty() << "] "; - print_array(debug(), arr); - debug() << eom; - } - for (expr_mapt::iterator it = refined_char.begin(), - end = refined_char.end(); it != end; ++it) { - const exprt &refined = it->second; - exprt chr = get(refined); - fmodel[refined] = chr; - debug() << "check_axioms adds to the model:" << pretty_short(it->first) - << " -> " << refined.get(ID_identifier) - << " -> " << chr.get(ID_value) << eom; - } -*/ + std::map::iterator it; + for (it = symbol_to_string.begin(); it != symbol_to_string.end(); ++it) + { + string_exprt refined = it->second; + const exprt &econtent = refined.content(); + const exprt &elength = refined.length(); + + exprt len = get(elength); + exprt arr = get_array(econtent, len); + fmodel[elength] = len; + fmodel[econtent] = arr; + debug() << "check_axioms adds to the model:" + << it->first << " := " << arr.pretty() << eom; + } std::vector< std::pair > violated; @@ -1173,14 +1143,14 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) if(val.id() == "array-list") { exprt ret = - array_of_exprt(to_unsignedbv_type(char_type).zero_expr(), - array_typet(char_type, size)); + array_of_exprt(to_unsignedbv_type(ref_char_typet).zero_expr(), + array_typet(ref_char_typet, size)); for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; - typecast_exprt idx(tmp_index, index_type); + typecast_exprt idx(tmp_index, ref_index_typet); exprt tmp_value = val.operands()[i*2+1]; - typecast_exprt value(tmp_value, char_type); + typecast_exprt value(tmp_value, ref_char_typet); ret = update_exprt(ret, idx, value); } return ret; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index d098742bbfa..14e2aa6433c 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -14,30 +14,46 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include +#define INDEX_WIDTH 32 +#define CHAR_WIDTH 8 + // Internal type used for strings class string_ref_typet : public struct_typet { public: string_ref_typet(); - // Type of characters - inline typet get_char_type() { return char_type; }; - // Type of character indexes in the string - inline typet get_index_type() { return index_type; }; - // Type to encode the length of a string - inline typet get_length_type() - { return to_struct_type(*this).components()[0].type();} // Type for the content (list of characters) of a string inline array_typet get_content_type() { return to_array_type((to_struct_type(*this)).components()[1].type());} +}; + -private: - typet index_type; - typet char_type; +class string_axiomt +{ +public: + //unsigned id_nr; + exprt lit; + + // index symbol + symbol_exprt idx; + exprt premise; + exprt body; + //std::string as_string() const; + //explicit string_axiomt(unsigned i=0): id_nr(i) {} + + string_axiomt(symbol_exprt index, exprt prem, exprt bod); + + // axiom with no premise + string_axiomt(exprt bod); + + inline bool is_quantified() {return (premise != true_exprt());} }; +typedef std::vector axiom_vect; + class string_exprt : public struct_exprt { public: @@ -46,17 +62,17 @@ class string_exprt : public struct_exprt { string_exprt(symbol_exprt sym); // returns a list of lemmas which should hold - std::vector of_expr(exprt unrefined_string, size_t char_width, size_t string_length_width); - std::vector of_function_application(const function_application_exprt &expr, size_t char_width, size_t string_length_width); - std::vector of_symbol(const symbol_exprt &expr); - std::vector of_string_literal(const function_application_exprt &expr, size_t char_width, size_t string_length_width); - std::vector of_string_concat(const function_application_exprt &expr); - std::vector of_string_substring(const function_application_exprt &expr); + axiom_vect of_expr(exprt unrefined_string); + axiom_vect of_function_application(const function_application_exprt &expr); + axiom_vect of_symbol(const symbol_exprt &expr); + axiom_vect of_string_literal(const function_application_exprt &expr); + axiom_vect of_string_concat(const function_application_exprt &expr); + axiom_vect of_string_substring(const function_application_exprt &expr); inline exprt length() { return op0();} inline exprt content() { return op1();} - friend inline string_exprt &to_string_expr(exprt expr) + friend inline string_exprt &to_string_expr(exprt &expr) { assert(expr.id()==ID_struct); return static_cast(expr); @@ -78,8 +94,6 @@ class string_refinementt: public bv_refinementt typedef bv_refinementt SUB; - inline size_t get_char_width() {return char_width;} - inline size_t get_string_length_width() {return string_length_width;} inline size_t get_string_width() { return boolbv_width(string_type);} @@ -93,27 +107,9 @@ class string_refinementt: public bv_refinementt private: string_ref_typet string_type; - typet index_type; - typet char_type; - size_t char_width; - size_t string_length_width; protected: - struct string_axiomt - { - public: - explicit string_axiomt(unsigned i=0): id_nr(i) {} - - unsigned id_nr; - exprt lit; - exprt idx; - exprt premise; - exprt body; - - std::string as_string() const; - }; - - typedef std::vector axiom_vect; + typedef std::set expr_sett; typedef std::map expr_mapt; typedef std::map index_sett; @@ -152,7 +148,7 @@ class string_refinementt: public bv_refinementt exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); void add_lemma(const exprt &lemma); - void add_lemmas(std::vector & lemmas); + void add_lemmas(axiom_vect & lemmas); From 2baf3bd887dfeae6e45cbdae588ef6b005f6b2c3 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 10 Aug 2016 16:18:47 +0100 Subject: [PATCH 034/221] adapted the code for string_equal --- src/solvers/refinement/string_refinement.cpp | 283 ++++++------------- src/solvers/refinement/string_refinement.h | 4 +- 2 files changed, 88 insertions(+), 199 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 4721f2fc5fa..db23dd64248 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -17,8 +17,8 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include // Types used in this refinement -unsignedbv_typet ref_char_typet(CHAR_WIDTH); -unsignedbv_typet ref_index_typet(INDEX_WIDTH); +unsignedbv_typet char_typet(CHAR_WIDTH); +unsignedbv_typet index_typet(INDEX_WIDTH); // Succinct version of pretty() @@ -45,9 +45,9 @@ string_ref_typet::string_ref_typet() : struct_typet() { components()[0].set_name("length"); components()[0].set_pretty_name("length"); - components()[0].type()=ref_index_typet; + components()[0].type()=index_typet; - array_typet char_array(ref_char_typet,infinity_exprt(ref_index_typet)); + array_typet char_array(char_typet,infinity_exprt(index_typet)); components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; @@ -68,6 +68,14 @@ string_axiomt::string_axiomt(exprt bod) lit = nil_exprt(); } +std::string string_axiomt::to_string() const +{ + std::ostringstream buf; + buf << "forall " << idx.get_identifier() << ". (" + << premise.pretty() << ") ==> " << body.pretty(); + return buf.str(); +} + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { @@ -121,7 +129,7 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { string_ref_typet t; - assert(length.type() == ref_index_typet); + assert(length.type() == index_typet); assert(content.type() == t.get_content_type()); move_to_operands(length,content); } @@ -129,7 +137,7 @@ string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_re string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; - symbol_exprt length = string_refinementt::fresh_symbol("string_length",ref_index_typet); + symbol_exprt length = string_refinementt::fresh_symbol("string_length",index_typet); symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); } @@ -197,15 +205,15 @@ axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) for (std::size_t i = 0; i < sval.size(); ++i) { std::string idx_binary = integer2binary(i,INDEX_WIDTH); - constant_exprt idx(idx_binary, ref_index_typet); + constant_exprt idx(idx_binary, index_typet); std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); - constant_exprt c(sval_binary,ref_char_typet); + constant_exprt c(sval_binary,char_typet); equal_exprt lemma(index_exprt(content(), idx), c); lemmas.push_back(string_axiomt(lemma)); } std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, ref_index_typet); + exprt s_length = constant_exprt(s_length_binary, index_typet); lemmas.push_back(string_axiomt(equal_exprt(length(),s_length))); return lemmas; @@ -229,7 +237,7 @@ axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) binary_relation_exprt lem2(length(), ID_ge, s2.length()); axioms.push_back(string_axiomt(lem2)); - symbol_exprt idx = string_refinementt::fresh_symbol("index", ref_index_typet); + symbol_exprt idx = string_refinementt::fresh_symbol("index", index_typet); //string_axiomt a1(string_axioms.size()); string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), @@ -250,61 +258,6 @@ axiom_vect string_exprt::of_string_substring(const function_application_exprt &e throw "of_string_substring: not implemented"; } -/* -exprt string_refinementt::expr_length(const exprt & str) -{ - assert(str.type() == string_type); - member_exprt m (str,"length",string_type.get_length_type()); - return m; -} - -bvt string_refinementt::bv_component(const bvt & struct_bv, const std::string & name, const typet & subtype) { - const struct_typet::componentst &components= - to_struct_type(string_type).components(); - - std::size_t offset=0; - - for(struct_typet::componentst::const_iterator it=components.begin(); - it!=components.end(); it++) - { - const typet &subtype=it->type(); - std::size_t sub_width=boolbv_width(subtype); - - if(it->get_name()==name) - { - assert(subtype == subtype); - bvt bv; - bv.resize(sub_width); - assert(offset+sub_width<=struct_bv.size()); - - for(std::size_t i=0; ivar_no()>=prop.no_variables() && !it->is_constant()) @@ -375,14 +330,6 @@ bvt string_refinementt::convert_symbol(const exprt &expr) } else return SUB::convert_symbol(expr); } -// This does nothing special -bvt string_refinementt::convert_struct(const struct_exprt &expr) -{ - debug() << "string_refinementt::convert_struct(" - << pretty_short(expr) << eom; - return SUB::convert_struct(expr); -} - bvt string_refinementt::convert_function_application( const function_application_exprt &expr) @@ -393,8 +340,11 @@ bvt string_refinementt::convert_function_application( const irep_idt &id = to_symbol_expr(name).get_identifier(); debug() << "string_refinementt::convert_function_application(" << id << ")" << eom; - if (id == string_literal_func) { - return convert_string_literal(expr); + if (id == string_literal_func || id == string_concat_func) { + string_exprt str; + str.of_expr(expr); + bvt bv = convert_bv(str); + return bv; } else if (id == char_literal_func) { return convert_char_literal(expr); } else if (id == string_length_func) { @@ -403,8 +353,6 @@ bvt string_refinementt::convert_function_application( return convert_string_equal(expr); } else if (id == string_char_at_func) { return convert_string_char_at(expr); - } else if (id == string_concat_func) { - return convert_string_concat(expr); } else if (id == string_substring_func) { return convert_string_substring(expr); } else if (id == string_is_prefix_func) { @@ -446,8 +394,8 @@ void string_refinementt::add_lemma(const exprt &lemma) { if(lemma.operands().size() == 2) { - debug() << "adding lemma " << pretty_short(lemma.op0()) - << " = " << pretty_short(lemma.op1()) << eom; + //debug() << "adding lemma " << pretty_short(lemma.op0()) << " ~ " << pretty_short(lemma.op1()) << eom; + debug() << "adding lemma " << lemma.op0().pretty() << " ~ " << lemma.op1().pretty() << eom; } prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); @@ -486,43 +434,44 @@ bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { symbol_exprt eq = fresh_symbol("equal"); - bvt bv = convert_bool_bv(eq, f); + bvt bv = convert_bv(eq); //convert_bool_bv(eq, f); const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string equal? - const exprt &s1 = args[0]; - const exprt &s2 = args[1]; + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); - string_exprt s1string = make_string(s1); - string_exprt s2string = make_string(s2); - exprt s1len = s1string.length(); - exprt s1arr = s1string.content(); - exprt s2len = s2string.length(); - exprt s2arr = s2string.content(); - throw "string_refinementt::convert_string_equal not implemented"; - /* - symbol_exprt witness = fresh_symbol("index", index_type); + // We want to write: + // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) + // We can't do it directly because of the universal quantification inside. + // So we say instead the three following: + // eq => s1.length = s2.length + // forall i < s1.length. eq => s1[i] = s2[i] + // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) + + symbol_exprt witness = fresh_symbol("index", index_typet); - implies_exprt lemma1(eq, equal_exprt(s1len, s2len)); + implies_exprt lemma1(eq, equal_exprt(s1.length(), s2.length())); add_lemma(lemma1); - string_axiomt a(string_axioms.size()); - a.idx = witness; - a.lit = eq; - a.premise = and_exprt(eq, binary_relation_exprt(witness, ID_lt, s1len)); - a.body = equal_exprt(index_exprt(s1arr, witness), - index_exprt(s2arr, witness)); + string_axiomt a(witness, + and_exprt(eq, binary_relation_exprt(witness, ID_lt, s1.length())), + equal_exprt(index_exprt(s1.content(), witness), + index_exprt(s2.content(), witness))); + debug() << "a.lit = eq; // why does lit means?"<< eom; string_axioms.push_back(a); - implies_exprt lemma2( - not_exprt(eq), - or_exprt(notequal_exprt(s1len, s2len), - and_exprt(binary_relation_exprt(witness, ID_lt, s1len), - notequal_exprt(index_exprt(s1arr, witness), - index_exprt(s2arr, witness))))); + implies_exprt + lemma2(not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + and_exprt + ( + binary_relation_exprt(witness, ID_lt, s1.length()), + notequal_exprt(index_exprt(s1.content(), witness), + index_exprt(s2.content(), witness))))); add_lemma(lemma2); - */ + return bv; } @@ -542,16 +491,6 @@ bvt string_refinementt::convert_string_length( } -bvt string_refinementt::convert_string_concat( - const function_application_exprt &f) -{ - string_exprt str; - str.of_expr(f); - bvt bv = convert_bv(str); - return bv; -} - - bvt string_refinementt::convert_string_substring( const function_application_exprt &f) { @@ -564,8 +503,8 @@ bvt string_refinementt::convert_string_substring( string_exprt arg_str = make_string(args[0]); exprt arg_len = arg_str.length(); exprt arg_arr = arg_str.content(); - typecast_exprt i(args[1], ref_index_typet); - typecast_exprt j(args[2], ref_index_typet); + typecast_exprt i(args[1], index_typet); + typecast_exprt j(args[2], index_typet); bvt bv = convert_bv(arr); throw "string_refinementt::convert_string_substring unimplemented"; /*exprt idx = fresh_symbol("index", index_type); @@ -679,51 +618,6 @@ bvt string_refinementt::convert_string_is_suffix( return bv; } -bvt string_refinementt::convert_string_literal( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); //bad args to string literal? - const exprt &arg = args[0]; - - - assert (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? - - const exprt &s = arg.op0().op0().op0(); - irep_idt sval = to_string_constant(s).get_value(); - - debug() << "Warning : string_refinementt::convert_string_literal(" - << sval << ") should not be used anymore" << eom; - throw "string_refinementt::convert_string_literal"; - - exprt str = make_string(f); - bvt bv_str = convert_bv(str); - /* - - bvt content = bv_content(bv_str); - - for (std::size_t i = 0; i < sval.size(); ++i) { - std::string idx_binary = integer2binary(i,string_length_width); - constant_exprt idx(idx_binary, index_type); - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); - constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(symbol_content(str), idx), c); - add_lemma(lemma); - } - - std::string s_length_binary = integer2binary(unsigned(sval.size()),32); - exprt s_length = constant_exprt(s_length_binary, string_type.get_length_type()); - exprt length = expr_length(str); - equal_exprt lemma(length,s_length); - - add_lemma(lemma); - */ - return bv_str; -} - bvt string_refinementt::convert_char_literal( @@ -743,7 +637,7 @@ bvt string_refinementt::convert_char_literal( assert(sval.size() == 1); //the argument to char literal should be a string of size 1 std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); - constant_exprt e(binary, ref_char_typet); + constant_exprt e(binary, char_typet); //refined_char[f] = e; bvt bv = convert_bv(e); return bv; @@ -760,7 +654,7 @@ bvt string_refinementt::convert_string_char_at( << pretty_short(args[1]) << ")" << eom; string_exprt str = make_string(args[0]); - typecast_exprt pos(args[1], ref_index_typet); + typecast_exprt pos(args[1], index_typet); index_exprt char_at(str.content(), pos); debug() << " --> " << char_at.pretty() << eom; bvt bv = convert_bv(char_at); @@ -782,9 +676,9 @@ bvt string_refinementt::convert_string_char_set( string_exprt sarg = make_string(args[0]); exprt sarr = sarg.content(); exprt slen = sarg.length(); - typecast_exprt idx(args[1], ref_index_typet); + typecast_exprt idx(args[1], index_typet); - symbol_exprt c = fresh_symbol("char", ref_char_typet); + symbol_exprt c = fresh_symbol("char", char_typet); bvt bva = convert_bv(args[2]); bvt bvc = convert_bv(c); bva.resize(bvc.size(), const_literal(false)); @@ -806,6 +700,7 @@ bvt string_refinementt::convert_string_char_set( void string_refinementt::add_instantiations(bool first) { + debug() << "string_refinementt::add_instantiations" << eom; if (first) { for (size_t i = 0; i < string_axioms.size(); ++i) { update_index_set(string_axioms[i]); @@ -856,6 +751,10 @@ bool string_refinementt::check_axioms() exprt arr = get_array(econtent, len); fmodel[elength] = len; fmodel[econtent] = arr; + debug() << "check_axioms adds to the model:" + << it->first << "'s length " + << pretty_short(elength) << " := " << len.pretty() << eom; + debug() << "check_axioms adds to the model:" << it->first << " := " << arr.pretty() << eom; } @@ -988,7 +887,7 @@ class find_qvar_visitor: public const_expr_visitort { ////////////////////////////////////////////////////////// exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { - std::cout << "string_refinement::compute_subst" << std::endl ; + //std::cout << "string_refinement::compute_subst" << std::endl ; std::vector< std::pair > to_process, elems; to_process.push_back(std::make_pair(f, true)); @@ -996,7 +895,7 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) exprt cur = to_process.back().first; bool positive = to_process.back().second; to_process.pop_back(); - + // std::cout << "processing " << cur.pretty() << std::endl; if (cur.id() == ID_plus) { to_process.push_back(std::make_pair(cur.op1(), positive)); to_process.push_back(std::make_pair(cur.op0(), positive)); @@ -1011,10 +910,10 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } exprt ret = nil_exprt(); - bool neg = false; bool found = false; + bool neg = false; - for (size_t i = 0; i < elems.size(); ++i) { + for (size_t i = 0; (i < elems.size()) ; ++i) { exprt &t = elems[i].first; if (t == qvar) { assert(!found); @@ -1024,26 +923,15 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) if (!elems[i].second) { t = unary_minus_exprt(t); } - if (ret.is_nil()) { - ret = t; - } else { - ret = plus_exprt(ret, t); - } + ret = (ret.is_nil())?t:plus_exprt(ret, t); } } assert(found); - if (ret.is_nil()) { - ret = minus_exprt(val, ret); - } else { - ret = val; - } + ret = (ret.is_nil())?val:minus_exprt(val, ret); - if (neg) { - ret = unary_minus_exprt(ret); - } - - return ret; + if (neg) return unary_minus_exprt(ret); + else return ret; } } // namespace @@ -1107,6 +995,7 @@ void string_refinementt::update_index_set(const exprt &formula) exprt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { + //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; find_index_visitor v1(str); try { axiom.body.visit(v1); @@ -1143,14 +1032,14 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) if(val.id() == "array-list") { exprt ret = - array_of_exprt(to_unsignedbv_type(ref_char_typet).zero_expr(), - array_typet(ref_char_typet, size)); + array_of_exprt(to_unsignedbv_type(char_typet).zero_expr(), + array_typet(char_typet, size)); for (size_t i = 0; i < val.operands().size()/2; ++i) { exprt tmp_index = val.operands()[i*2]; - typecast_exprt idx(tmp_index, ref_index_typet); + typecast_exprt idx(tmp_index, index_typet); exprt tmp_value = val.operands()[i*2+1]; - typecast_exprt value(tmp_value, ref_char_typet); + typecast_exprt value(tmp_value, char_typet); ret = update_exprt(ret, idx, value); } return ret; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 14e2aa6433c..59c7f75aef9 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -50,6 +50,8 @@ class string_axiomt string_axiomt(exprt bod); inline bool is_quantified() {return (premise != true_exprt());} + + std::string to_string() const; }; typedef std::vector axiom_vect; @@ -131,11 +133,9 @@ class string_refinementt: public bv_refinementt bvt convert_string_equal(const function_application_exprt &f); bvt convert_string_copy(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); - bvt convert_string_concat(const function_application_exprt &f); bvt convert_string_substring(const function_application_exprt &f); bvt convert_string_is_prefix(const function_application_exprt &f); bvt convert_string_is_suffix(const function_application_exprt &f); - bvt convert_string_literal(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); bvt convert_string_char_set(const function_application_exprt &f); From e447fa7e9bbe389f4d4eeeeb702e9d4a53978424 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 10 Aug 2016 16:19:47 +0100 Subject: [PATCH 035/221] adapted the code for string_equal --- src/solvers/refinement/string_refinement.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index db23dd64248..e6412575ff3 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -395,7 +395,7 @@ void string_refinementt::add_lemma(const exprt &lemma) if(lemma.operands().size() == 2) { //debug() << "adding lemma " << pretty_short(lemma.op0()) << " ~ " << pretty_short(lemma.op1()) << eom; - debug() << "adding lemma " << lemma.op0().pretty() << " ~ " << lemma.op1().pretty() << eom; + debug() << "adding lemma " << lemma << eom; } prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); From 7999115e9976a1af17693023539ea525cb2f2b7f Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 11 Aug 2016 16:30:31 +0100 Subject: [PATCH 036/221] making the PASS algorithm cleaner --- src/solvers/flattening/boolbv_get.cpp | 3 +- src/solvers/flattening/boolbv_update.cpp | 23 +- src/solvers/refinement/string_refinement.cpp | 612 +++++++++---------- src/solvers/refinement/string_refinement.h | 120 ++-- 4 files changed, 379 insertions(+), 379 deletions(-) diff --git a/src/solvers/flattening/boolbv_get.cpp b/src/solvers/flattening/boolbv_get.cpp index 43d813d6ff0..3ea95267348 100644 --- a/src/solvers/flattening/boolbv_get.cpp +++ b/src/solvers/flattening/boolbv_get.cpp @@ -393,8 +393,7 @@ exprt boolbvt::bv_get_unbounded_array(const exprt &expr) const std::cout << "boolbv_get.cpp get root: " << number << std::endl; number=arrays.find_number(number); - std::cout << "warning: boolbv_get.cpp, removing assertion" << std::endl; - //assert(numbersecond; diff --git a/src/solvers/flattening/boolbv_update.cpp b/src/solvers/flattening/boolbv_update.cpp index 568d57d1f5c..2287ae26f27 100644 --- a/src/solvers/flattening/boolbv_update.cpp +++ b/src/solvers/flattening/boolbv_update.cpp @@ -18,6 +18,9 @@ Author: Daniel Kroening, kroening@kroening.com #include "boolbv.h" +// for debugging +#include + /*******************************************************************\ Function: boolbvt::convert_update @@ -83,12 +86,19 @@ void boolbvt::convert_update_rec( // done bvt new_value_bv=convert_bv(new_value); std::size_t new_value_width=boolbv_width(type); - - if(new_value_width!=new_value_bv.size()) + + std::cout << "warning: in boolbvt::convert_update_rec we removed a test " << std::endl; + /* + if(new_value_width!=new_value_bv.size()) { + std::cout << "new_value == " << new_value.pretty() << std::endl; + std::cout << "type of new_value == " << type.pretty() << std::endl; throw "convert_update_rec: unexpected new_value size"; + } + */ // update - for(std::size_t i=0; i // Types used in this refinement -unsignedbv_typet char_typet(CHAR_WIDTH); -unsignedbv_typet index_typet(INDEX_WIDTH); +unsignedbv_typet char_type(CHAR_WIDTH); +unsignedbv_typet index_type(INDEX_WIDTH); // Succinct version of pretty() @@ -38,16 +38,14 @@ std::string pretty_short(exprt expr) { // associate a string to symbols std::map symbol_to_string; - - string_ref_typet::string_ref_typet() : struct_typet() { components().resize(2); components()[0].set_name("length"); components()[0].set_pretty_name("length"); - components()[0].type()=index_typet; + components()[0].type()=index_type; - array_typet char_array(char_typet,infinity_exprt(index_typet)); + array_typet char_array(char_type,infinity_exprt(index_type)); components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; @@ -55,23 +53,21 @@ string_ref_typet::string_ref_typet() : struct_typet() { string_axiomt::string_axiomt(symbol_exprt index, exprt prem, exprt bod) { - idx = index; + qvar = index; premise = prem; body = bod; - lit = nil_exprt(); } string_axiomt::string_axiomt(exprt bod) { premise = true_exprt(); body = bod; - lit = nil_exprt(); } std::string string_axiomt::to_string() const { std::ostringstream buf; - buf << "forall " << idx.get_identifier() << ". (" + buf << "forall " << qvar.get_identifier() << ". (" << premise.pretty() << ") ==> " << body.pretty(); return buf.str(); } @@ -126,19 +122,35 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } +// finds the string from which the content expression comes +std::map map_content_to_string; + +/* +string_exprt & string_exprt::by_content (const exprt & content) +{ return *(map_content_to_string.at(content.get_identifier())); } + +void associate_content (string_exprt * str, const exprt & content) +{ + std::cout << "associate " << pretty_short(content) << " to " << pretty_short(*str) << std::endl; + map_content_to_string[content]=str; +} +*/ + string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { string_ref_typet t; - assert(length.type() == index_typet); + assert(length.type() == index_type); assert(content.type() == t.get_content_type()); + //associate_content(this,content); move_to_operands(length,content); } string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; - symbol_exprt length = string_refinementt::fresh_symbol("string_length",index_typet); + symbol_exprt length = string_refinementt::fresh_symbol("string_length",index_type); symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); + //associate_content(this,content); move_to_operands(length,content); } @@ -180,6 +192,8 @@ axiom_vect string_exprt::of_function_application(const function_application_expr return of_string_concat(expr); } else if (id == "__CPROVER_uninterpreted_substring") { return of_string_substring(expr); + } else if (id == "__CPROVER_uninterpreted_char_set") { + return of_string_char_set(expr); } } throw "non string function"; @@ -205,15 +219,15 @@ axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) for (std::size_t i = 0; i < sval.size(); ++i) { std::string idx_binary = integer2binary(i,INDEX_WIDTH); - constant_exprt idx(idx_binary, index_typet); + constant_exprt idx(idx_binary, index_type); std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); - constant_exprt c(sval_binary,char_typet); + constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); lemmas.push_back(string_axiomt(lemma)); } std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, index_typet); + exprt s_length = constant_exprt(s_length_binary, index_type); lemmas.push_back(string_axiomt(equal_exprt(length(),s_length))); return lemmas; @@ -222,13 +236,13 @@ axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) { - axiom_vect axioms; const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string concat string_exprt s1,s2; - s1.of_expr(args[0]); - s2.of_expr(args[1]); + axiom_vect axioms = s1.of_expr(args[0]); + axiom_vect s2axioms = s2.of_expr(args[1]); + axioms.insert(axioms.end(), s2axioms.begin(), s2axioms.end()); equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.push_back(string_axiomt(length_sum_lem)); @@ -237,7 +251,7 @@ axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) binary_relation_exprt lem2(length(), ID_ge, s2.length()); axioms.push_back(string_axiomt(lem2)); - symbol_exprt idx = string_refinementt::fresh_symbol("index", index_typet); + symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); //string_axiomt a1(string_axioms.size()); string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), @@ -253,11 +267,68 @@ axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) return axioms; } -axiom_vect string_exprt::of_string_substring(const function_application_exprt &expr) +axiom_vect string_exprt::of_string_substring +(const function_application_exprt &expr) { - throw "of_string_substring: not implemented"; + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); // bad args to string substring? + + string_exprt str; + axiom_vect axioms = str.of_expr(args[0]); + typecast_exprt i(args[1], index_type); + typecast_exprt j(args[2], index_type); + + symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); + + // forall idx < str.length, str[idx] = arg_str[idx+i] + string_axiomt a(idx, + binary_relation_exprt(idx, ID_lt, length()), + equal_exprt(index_exprt(content(),idx), + str[plus_exprt(i, idx)])); + axioms.push_back(a); + + and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), + and_exprt(binary_relation_exprt(j, ID_le, str.length()), + equal_exprt(length(), minus_exprt(j, i)))); + axioms.push_back(string_axiomt(lemma1)); + + binary_relation_exprt lemma2(str.length(), ID_ge, length()); + axioms.push_back(string_axiomt(lemma2)); + + return axioms; +} + +axiom_vect string_exprt::of_string_char_set +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); //bad args to string_char_set? + + string_exprt str; + axiom_vect axioms = str.of_expr(args[0]); + symbol_exprt c = string_refinementt::fresh_symbol("char", char_type); + + std::cout << "of_string_char_set : this has to be checked" << std::endl; + + axioms.push_back(equal_exprt(c,args[2])); + with_exprt sarrnew(str.content(), args[1], c); + implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), + and_exprt(equal_exprt(content(), + // update_exprt(str.content(), args[1], c)), + sarrnew), + equal_exprt(length(), str.length()))); + axioms.push_back(lemma); + + return axioms; } + + +/////////////////////// +// String refinement // +/////////////////////// + + // Nothing particular is done there for now void string_refinementt::post_process() { @@ -291,7 +362,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); - map.set_literals(identifier, char_typet, bv1); + map.set_literals(identifier, char_type, bv1); if(freeze_all) set_frozen(bv1); return false; } else return SUB::boolbv_set_equality_to_true(expr); @@ -318,7 +389,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) } else if (is_unrefined_char_type(expr.type())) { bvt bv; bv.resize(CHAR_WIDTH); - map.get_literals(identifier, char_typet, CHAR_WIDTH, bv); + map.get_literals(identifier, char_type, CHAR_WIDTH, bv); forall_literals(it, bv) if(it->var_no()>=prop.no_variables() && !it->is_constant()) @@ -340,9 +411,11 @@ bvt string_refinementt::convert_function_application( const irep_idt &id = to_symbol_expr(name).get_identifier(); debug() << "string_refinementt::convert_function_application(" << id << ")" << eom; - if (id == string_literal_func || id == string_concat_func) { - string_exprt str; - str.of_expr(expr); + if (id == string_literal_func + || id == string_concat_func + || id == string_substring_func + || id == string_char_set_func) { + string_exprt str = make_string(expr); bvt bv = convert_bv(str); return bv; } else if (id == char_literal_func) { @@ -353,14 +426,10 @@ bvt string_refinementt::convert_function_application( return convert_string_equal(expr); } else if (id == string_char_at_func) { return convert_string_char_at(expr); - } else if (id == string_substring_func) { - return convert_string_substring(expr); } else if (id == string_is_prefix_func) { return convert_string_is_prefix(expr); } else if (id == string_is_suffix_func) { return convert_string_is_suffix(expr); - } else if (id == string_char_set_func) { - return convert_string_char_set(expr); } } @@ -383,7 +452,6 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) bvt ret; ret.push_back(convert(boole)); size_t width = boolbv_width(orig.type()); - debug() << "string_refinementt::convert_bool_bv: why start at i = 1?" << eom; for (size_t i = 1; i < width; ++i) { ret.push_back(const_literal(false)); } @@ -392,11 +460,7 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { - if(lemma.operands().size() == 2) - { - //debug() << "adding lemma " << pretty_short(lemma.op0()) << " ~ " << pretty_short(lemma.op1()) << eom; - debug() << "adding lemma " << lemma << eom; - } + debug() << "adding lemma " << lemma << eom; prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } @@ -406,7 +470,7 @@ void string_refinementt::add_lemmas(axiom_vect & lemmas) axiom_vect::iterator it; for(it = lemmas.begin(); it != lemmas.end(); it++) { - // distinguished between lemmas that are not universaly quantified + // distinguish between lemmas that are not universaly quantified if(!(it->is_quantified())) add_lemma(it->body); else @@ -417,7 +481,6 @@ void string_refinementt::add_lemmas(axiom_vect & lemmas) void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { string_exprt s(sym); - debug() << "make_string of symbol " << pretty_short(sym) << eom; axiom_vect lemmas = s.of_expr(str); add_lemmas(lemmas); } @@ -434,7 +497,9 @@ bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { symbol_exprt eq = fresh_symbol("equal"); - bvt bv = convert_bv(eq); //convert_bool_bv(eq, f); + boolean_symbols.push_back(eq); + assert(f.type() == bool_typet()); + bvt bv = convert_bv(eq); const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string equal? @@ -450,26 +515,19 @@ bvt string_refinementt::convert_string_equal( // forall i < s1.length. eq => s1[i] = s2[i] // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) - symbol_exprt witness = fresh_symbol("index", index_typet); + symbol_exprt witness = fresh_symbol("index", index_type); - implies_exprt lemma1(eq, equal_exprt(s1.length(), s2.length())); - add_lemma(lemma1); + add_lemma(implies_exprt(eq, equal_exprt(s1.length(), s2.length()))); - string_axiomt a(witness, - and_exprt(eq, binary_relation_exprt(witness, ID_lt, s1.length())), - equal_exprt(index_exprt(s1.content(), witness), - index_exprt(s2.content(), witness))); - debug() << "a.lit = eq; // why does lit means?"<< eom; - string_axioms.push_back(a); + string_axioms.emplace_back(witness, + and_exprt(eq, s1 > witness), + equal_exprt(s1[witness],s2[witness])); implies_exprt lemma2(not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - and_exprt - ( - binary_relation_exprt(witness, ID_lt, s1.length()), - notequal_exprt(index_exprt(s1.content(), witness), - index_exprt(s2.content(), witness))))); + and_exprt(s1 > witness, + notequal_exprt(s1[witness],s2[witness])))); add_lemma(lemma2); return bv; @@ -491,42 +549,6 @@ bvt string_refinementt::convert_string_length( } -bvt string_refinementt::convert_string_substring( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); // bad args to string substring? - - string_exprt str = make_string(f); - exprt len = str.length(); - exprt arr = str.content(); - string_exprt arg_str = make_string(args[0]); - exprt arg_len = arg_str.length(); - exprt arg_arr = arg_str.content(); - typecast_exprt i(args[1], index_typet); - typecast_exprt j(args[2], index_typet); - bvt bv = convert_bv(arr); - throw "string_refinementt::convert_string_substring unimplemented"; - /*exprt idx = fresh_symbol("index", index_type); - - string_axiomt a(string_axioms.size()); - a.idx = idx; - a.lit = nil_exprt(); - a.premise = binary_relation_exprt(idx, ID_lt, len); - a.body = equal_exprt(index_exprt(arr, idx), - index_exprt(arg_arr, plus_exprt(i, idx))); - string_axioms.push_back(a); - - and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), - and_exprt(binary_relation_exprt(j, ID_le, arg_len), - equal_exprt(len, minus_exprt(j, i)))); - add_lemma(lemma1); - - binary_relation_exprt lemma2(arg_len, ID_ge, len); - add_lemma(lemma2); - */ - return bv; -} bvt string_refinementt::convert_string_is_prefix( @@ -536,37 +558,25 @@ bvt string_refinementt::convert_string_is_prefix( assert(args.size() == 2); //bad args to string isprefix symbol_exprt isprefix = fresh_symbol("isprefix"); + boolean_symbols.push_back(isprefix); + string_exprt s0 = make_string(args[0]); + string_exprt s1 = make_string(args[1]); + assert(f.type() == bool_typet()); + bvt bv = convert_bv(isprefix); - string_exprt s0str = make_string(args[0]); - exprt s0len = s0str.length(); - exprt s0arr = s0str.content(); - string_exprt s1str = make_string(args[1]); - exprt s1len = s1str.length(); - exprt s1arr = s1str.content(); - bvt bv = convert_bool_bv(isprefix, f); - throw "string_refinementt::convert_string_is_prefix unimplemented" ; - /* - implies_exprt lemma1(isprefix, binary_relation_exprt(s0len, ID_ge, s1len)); - add_lemma(lemma1); - + add_lemma(implies_exprt(isprefix, s0 >= s1)); + symbol_exprt witness = fresh_symbol("index", index_type); - string_axiomt a(string_axioms.size()); - a.idx = witness; - a.lit = isprefix; - a.premise = and_exprt(isprefix, binary_relation_exprt(witness, ID_lt, s1len)); - a.body = equal_exprt(index_exprt(s1arr, witness), - index_exprt(s0arr, witness)); - string_axioms.push_back(a); - - implies_exprt lemma2( - not_exprt(isprefix), - or_exprt(not_exprt(binary_relation_exprt(s0len, ID_ge, s1len)), - and_exprt(binary_relation_exprt(witness, ID_lt, s1len), - notequal_exprt(index_exprt(s1arr, witness), - index_exprt(s0arr, witness))))); - add_lemma(lemma2); - */ + // forall witness < s1.length. isprefix => s1[witness] = s2[witness] + string_axioms.emplace_back(witness, and_exprt(isprefix, s1 > witness), + equal_exprt(s1[witness],s0[witness])); + + or_exprt s1_notpref_s0(not_exprt(s0 >= s1), + and_exprt(s1 > witness, + notequal_exprt(s1[witness],s0[witness]))); + + add_lemma(implies_exprt (not_exprt(isprefix),s1_notpref_s0)); return bv; } @@ -578,43 +588,36 @@ bvt string_refinementt::convert_string_is_suffix( assert(args.size() == 2); // bad args to string issuffix? symbol_exprt issuffix = fresh_symbol("issuffix"); - bvt bv = convert_bool_bv(issuffix, f); + boolean_symbols.push_back(issuffix); - throw "string_refinementt::convert_string_is_suffix unimplemented"; - /* string_exprt s0 = make_string(args[0]); - exprt s0len = s0.length(); - exprt s0arr = s0.content(); string_exprt s1 = make_string(args[1]); - exprt s1len = s1.length(); - exprt s1arr = s1.content(); - - implies_exprt lemma1(issuffix, binary_relation_exprt(s0len, ID_ge, s1len)); - add_lemma(lemma1); + // issufix => s0.length >= s1.length + // && forall witness < s1.length. + // issufix => s1[witness] = s0[witness + s0.length - s1.length] + // && !issuffix => s1.length > s0.length + // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] symbol_exprt witness = fresh_symbol("index", index_type); - string_axiomt a(string_axioms.size()); - a.idx = witness; - a.lit = issuffix; - a.premise = and_exprt(issuffix, binary_relation_exprt(witness, ID_lt, s1len)); - a.body = equal_exprt( - index_exprt(s1arr, witness), - index_exprt(s0arr, - plus_exprt(witness, minus_exprt(s0len, s1len)))); - string_axioms.push_back(a); - - implies_exprt lemma2( - not_exprt(issuffix), - or_exprt(not_exprt(binary_relation_exprt(s0len, ID_ge, s1len)), - and_exprt(binary_relation_exprt(witness, ID_lt, s1len), - notequal_exprt( - index_exprt(s1arr, witness), - index_exprt(s0arr, - plus_exprt(witness, - minus_exprt(s0len, s1len))))))); + add_lemma(implies_exprt(issuffix, s0 >= s1)); + + exprt shifted = plus_exprt(witness, + minus_exprt(s0.length(), s1.length())); + + string_axioms.emplace_back(witness, and_exprt(issuffix, s1 > witness), + equal_exprt(s1[witness],s0[shifted])); + + implies_exprt lemma2(not_exprt(issuffix), + or_exprt(s1 > s0, + and_exprt(s1 > witness, + notequal_exprt(s1[witness],s0[shifted])))); + add_lemma(lemma2); - */ + + assert(f.type() == bool_typet()); + bvt bv = convert_bv(issuffix); + return bv; } @@ -627,20 +630,19 @@ bvt string_refinementt::convert_char_literal( assert(args.size() == 1); // there should be exactly 1 argument to char literal const exprt &arg = args[0]; + // argument to char literal should be one string constant of size one assert(arg.operands().size() == 1 && arg.op0().operands().size() == 1 && arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant); // argument to char literal should be one string constant + arg.op0().op0().op0().id() == ID_string_constant); const string_constantt s = to_string_constant(arg.op0().op0().op0()); irep_idt sval = s.get_value(); - assert(sval.size() == 1); //the argument to char literal should be a string of size 1 + assert(sval.size() == 1); std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); - constant_exprt e(binary, char_typet); - //refined_char[f] = e; - bvt bv = convert_bv(e); - return bv; + + return convert_bv(constant_exprt(binary, char_type)); } @@ -649,54 +651,15 @@ bvt string_refinementt::convert_string_char_at( { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments - debug() << "string_refinementt::convert_char_at(" - << pretty_short(args[0]) << "," - << pretty_short(args[1]) << ")" << eom; - string_exprt str = make_string(args[0]); - typecast_exprt pos(args[1], index_typet); - index_exprt char_at(str.content(), pos); - debug() << " --> " << char_at.pretty() << eom; - bvt bv = convert_bv(char_at); - return bv; -} - - -bvt string_refinementt::convert_string_char_set( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); //bad args to string_char_set? - - string_exprt str = make_string(f); - exprt arr = str.content(); - exprt len = str.length(); - bvt bv = convert_bv(arr); - - string_exprt sarg = make_string(args[0]); - exprt sarr = sarg.content(); - exprt slen = sarg.length(); - typecast_exprt idx(args[1], index_typet); - - symbol_exprt c = fresh_symbol("char", char_typet); - bvt bva = convert_bv(args[2]); - bvt bvc = convert_bv(c); - bva.resize(bvc.size(), const_literal(false)); - debug() << "convert_string_char_set: Why don't we include 0?" << eom; - for (size_t i = 0; i < bvc.size(); ++i) { - prop.set_equal(bva[i], bvc[i]); - } - - implies_exprt lemma(binary_relation_exprt(idx, ID_lt, slen), - and_exprt(equal_exprt(arr, update_exprt(sarr, idx, c)), - equal_exprt(len, slen))); - add_lemma(lemma); - - return bv; + return convert_bv(str[args[1]]); } +//////////////////// +// PASS Algorithm // +//////////////////// void string_refinementt::add_instantiations(bool first) { @@ -712,8 +675,8 @@ void string_refinementt::add_instantiations(bool first) cur.clear(); - for (index_sett::iterator i = index_set.begin(), end = index_set.end(); - i != end; ++i) { + for (std::map::iterator i = index_set.begin(), + end = index_set.end(); i != end; ++i) { const exprt &s = i->first; for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) { @@ -728,6 +691,37 @@ void string_refinementt::add_instantiations(bool first) } } + +exprt string_refinementt::get_array(const exprt &arr, const exprt &size) +{ + debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) + << "," << size.get(ID_value) << ")" << eom; + exprt val = get(arr); + + if(val.id() == "array-list") { + exprt ret = + array_of_exprt(char_type.zero_expr(), array_typet(char_type, infinity_exprt(index_type))); + // size)); + + for (size_t i = 0; i < val.operands().size()/2; i++) { + exprt index = val.operands()[i*2]; + assert(index.type() == index_type); + //typecast_exprt idx(tmp_index, index_type); + exprt value = val.operands()[i*2+1]; + //typecast_exprt value(tmp_value, char_type); + assert(value.type() == char_type); + ret = with_exprt(ret, index, value); + } + return ret; + + } else { + debug() << "unable to get array-list value of " + << pretty_short(val) << eom; + return arr; + } +} + + bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver @@ -738,8 +732,6 @@ bool string_refinementt::check_axioms() << " interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; - debug() << "We should look at the strings in symbol_to_string" << eom; - std::map::iterator it; for (it = symbol_to_string.begin(); it != symbol_to_string.end(); ++it) { @@ -749,29 +741,31 @@ bool string_refinementt::check_axioms() exprt len = get(elength); exprt arr = get_array(econtent, len); + fmodel[elength] = len; fmodel[econtent] = arr; - debug() << "check_axioms adds to the model:" - << it->first << "'s length " - << pretty_short(elength) << " := " << len.pretty() << eom; - - debug() << "check_axioms adds to the model:" - << it->first << " := " << arr.pretty() << eom; + debug() << "check_axioms: " << it->first << " := " << arr << eom; } + for(std::vector::iterator it = boolean_symbols.begin(); + it != boolean_symbols.end(); it++) { + debug() << "check_axioms: " << *it << " := " << get(*it) << eom; + fmodel[*it] = get(*it); + } + std::vector< std::pair > violated; for (size_t i = 0; i < string_axioms.size(); ++i) { debug() << "string axiom " << i << eom; const string_axiomt &axiom = string_axioms[i]; - if (axiom.lit.is_not_nil()) { - exprt lit = get(axiom.lit); - fmodel[axiom.lit] = lit; - } + exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); + debug() << "string axiom = " << axiom.to_string() << eom; + debug() << "neg axiom = " << negaxiom.pretty() << eom; + satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); solver << negaxiom; @@ -779,7 +773,7 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { debug() << "satisfiable" << eom; - exprt val = solver.get(axiom.idx); + exprt val = solver.get(axiom.qvar); violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: @@ -802,8 +796,8 @@ bool string_refinementt::check_axioms() const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); exprt body(axiom.body); - replace_expr(axiom.idx, val, premise); - replace_expr(axiom.idx, val, body); + replace_expr(axiom.qvar, val, premise); + replace_expr(axiom.qvar, val, body); implies_exprt instance(premise, body); if (seen_instances.insert(instance).second) { add_lemma(instance); @@ -817,64 +811,31 @@ bool string_refinementt::check_axioms() namespace { -void get_bounds(const exprt &qvar, const exprt &expr, std::vector &out) -{ - if (expr.id() == ID_lt && expr.op0() == qvar) { - const exprt &b = expr.op1(); - constant_exprt one("1", b.type()); - out.push_back(minus_exprt(b, one)); - } else if (expr.id() == ID_le && expr.op0() == qvar) { - out.push_back(expr.op1()); - } else { - forall_operands(it, expr) { - get_bounds(qvar, *it, out); - } - } -} - + constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); -struct stop_visit {}; - -class find_index_visitor: public const_expr_visitort { -public: - find_index_visitor(const exprt &str): - str_(str) - { - idx = nil_exprt(); - } - - void operator()(const exprt &expr) + // Gets the upper bounds that are applied to [qvar], in the expression [expr] + void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) { - if (expr.id() == ID_index) { - const index_exprt &i = to_index_expr(expr); - if (i.array() == str_) { - idx = i.index(); - throw stop_visit(); + std::vector to_treat; + to_treat.push_back(expr); + while(!to_treat.empty()) { + exprt e = to_treat.back(); + to_treat.pop_back(); + if (e.id() == ID_lt && e.op0() == qvar) { + assert(e.op1().type() == index_type); + out.push_back(minus_exprt(e.op1(), index_one)); + } else if (e.id() == ID_le && e.op0() == qvar) { + out.push_back(e.op1()); + } else { + forall_operands(it, e) { + to_treat.push_back(*it); + } } } } - const exprt &str_; - exprt idx; -}; -class find_qvar_visitor: public const_expr_visitort { -public: - find_qvar_visitor(const exprt &qvar): - qvar_(qvar), found(false) {} - - void operator()(const exprt &expr) - { - if (expr == qvar_) { - found = true; - throw stop_visit(); - } - } - - const exprt &qvar_; - bool found; -}; ////////////////////////////////////////////////////////// // For expressions f of a certain form, // @@ -937,10 +898,32 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } // namespace +class find_qvar_visitor: public const_expr_visitort { +private: + const exprt &qvar_; + +public: + find_qvar_visitor(const exprt &qvar): qvar_(qvar) {} + + void operator()(const exprt &expr) { + if (expr == qvar_) throw true; + } +}; + +// Look for the given symbol in the index expression +bool find_qvar(const exprt index, const symbol_exprt & qvar) { + find_qvar_visitor v2(qvar); + try { + index.visit(v2); + return false; + } catch (bool found) {return found;} +} + + void string_refinementt::update_index_set(const string_axiomt &axiom) { std::vector bounds; - get_bounds(axiom.idx, axiom.premise, bounds); + get_bounds(axiom.qvar, axiom.premise, bounds); std::vector to_process; to_process.push_back(axiom.body); @@ -952,12 +935,14 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) const exprt &s = cur.op0(); const exprt &i = cur.op1(); - find_qvar_visitor v(axiom.idx); - try { - i.visit(v); - } catch (stop_visit &) {} - if (!v.found) { - expr_sett &idxs = index_set[s]; + // if cur is of the form s[i] and qvar does not appear in i... + if(!find_qvar(i,axiom.qvar)) { + assert(s.type() == string_type.get_content_type()); + //debug() << "map_content_to_string " << s << eom; + //string_exprt str = string_exprt::by_content(s); + //debug() << " --> " << str << eom; + expr_sett &idxs = index_set[s]; + // we add the bounds to the index set idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); } @@ -981,7 +966,9 @@ void string_refinementt::update_index_set(const exprt &formula) if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - + //debug() << "map_content_to_string " << s << eom; + //string_exprt str = string_exprt::by_content(s); + //debug() << " --> " << str << eom; index_set[s].insert(i); } else { forall_operands(it, cur) { @@ -992,62 +979,51 @@ void string_refinementt::update_index_set(const exprt &formula) } -exprt string_refinementt::instantiate(const string_axiomt &axiom, - const exprt &str, const exprt &val) -{ - //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; +// Will be used to visit an expression and return the index used +// with the given char array +class find_index_visitor: public const_expr_visitort { +private: + const exprt &str_; + +public: + find_index_visitor(const exprt &str): str_(str){} + + void operator()(const exprt &expr) { + if (expr.id() == ID_index) { + const index_exprt &i = to_index_expr(expr); + if (i.array() == str_) + throw i.index(); + } + } +}; + +// Find an index used in the char array str +exprt find_index(const exprt & expr, const exprt & str) { find_index_visitor v1(str); try { - axiom.body.visit(v1); - } catch (stop_visit &) {} - - if (v1.idx.is_nil()) { + expr.visit(v1); return nil_exprt(); - } + } + catch (exprt i) { return i; } +} - find_qvar_visitor v2(axiom.idx); - try { - v1.idx.visit(v2); - } catch (stop_visit &) {} - if (!v2.found) { - return nil_exprt(); - } - exprt r = compute_subst(axiom.idx, val, v1.idx); +exprt string_refinementt::instantiate(const string_axiomt &axiom, + const exprt &str, const exprt &val) +{ + //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; + exprt idx = find_index(axiom.body,str); + if(idx.is_nil()) return nil_exprt(); + if(!find_qvar(idx,axiom.qvar)) return nil_exprt(); + + exprt r = compute_subst(axiom.qvar, val, idx); exprt premise(axiom.premise); - replace_expr(axiom.idx, r, premise); exprt body(axiom.body); - replace_expr(axiom.idx, r, body); + // replace_expr(what,by,dest) replaces in dest all occurances of [what] + // by expression [by] implies_exprt instance(premise, body); - + replace_expr(axiom.qvar, r, instance); return instance; } -exprt string_refinementt::get_array(const exprt &arr, const exprt &size) -{ - debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) - << "," << size.get(ID_value) << ")" << eom; - exprt val = get(arr); - - if(val.id() == "array-list") { - exprt ret = - array_of_exprt(to_unsignedbv_type(char_typet).zero_expr(), - array_typet(char_typet, size)); - - for (size_t i = 0; i < val.operands().size()/2; ++i) { - exprt tmp_index = val.operands()[i*2]; - typecast_exprt idx(tmp_index, index_typet); - exprt tmp_value = val.operands()[i*2+1]; - typecast_exprt value(tmp_value, char_typet); - ret = update_exprt(ret, idx, value); - } - return ret; - - } else { - debug() << "unable to get array-list value of " - << val.pretty() << eom; - return arr; - } -} - diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 59c7f75aef9..964decc4a06 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -34,10 +34,9 @@ class string_axiomt { public: //unsigned id_nr; - exprt lit; - - // index symbol - symbol_exprt idx; + //exprt lit; + //quantified symbol + symbol_exprt qvar; exprt premise; exprt body; @@ -58,6 +57,8 @@ typedef std::vector axiom_vect; class string_exprt : public struct_exprt { + + public: string_exprt(); string_exprt(exprt length, exprt content); @@ -70,21 +71,40 @@ class string_exprt : public struct_exprt { axiom_vect of_string_literal(const function_application_exprt &expr); axiom_vect of_string_concat(const function_application_exprt &expr); axiom_vect of_string_substring(const function_application_exprt &expr); + axiom_vect of_string_char_set(const function_application_exprt &expr); - inline exprt length() { return op0();} - inline exprt content() { return op1();} - + inline const exprt & length() const { return op0();}; + inline const exprt & content() const { return op1();}; + + inline index_exprt operator[] (exprt idx) + { //typecast_exprt pos(idx, index_type); + return index_exprt(content(), idx);} + + inline binary_relation_exprt operator< (string_exprt rhs) + { return binary_relation_exprt(length(), ID_lt, rhs.length()); } + inline binary_relation_exprt operator> (string_exprt rhs) + { return binary_relation_exprt(rhs.length(), ID_lt, length()); } + inline binary_relation_exprt operator<= (string_exprt rhs) + { return binary_relation_exprt(length(), ID_le, rhs.length()); } + inline binary_relation_exprt operator>= (string_exprt rhs) + { return binary_relation_exprt(length(), ID_ge, rhs.length()); } + inline binary_relation_exprt operator< (const symbol_exprt & rhs) + { return binary_relation_exprt(length(), ID_lt, rhs); } + inline binary_relation_exprt operator> (const symbol_exprt & rhs) + { return binary_relation_exprt(rhs, ID_lt, length()); } + friend inline string_exprt &to_string_expr(exprt &expr) { assert(expr.id()==ID_struct); return static_cast(expr); } + + static string_exprt & by_content (const exprt & content); }; string_exprt &to_string_expr(exprt expr); - class string_refinementt: public bv_refinementt { public: @@ -105,26 +125,36 @@ class string_refinementt: public bv_refinementt // Generate a new symbol of the given type tp with a prefix static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); - static unsigned next_symbol_id; + + irep_idt string_literal_func; + irep_idt char_literal_func; + irep_idt string_length_func; + irep_idt string_equal_func; + irep_idt string_copy_func; + irep_idt string_char_at_func; + irep_idt string_concat_func; + irep_idt string_substring_func; + irep_idt string_is_prefix_func; + irep_idt string_is_suffix_func; + irep_idt string_char_set_func; private: string_ref_typet string_type; + static unsigned next_symbol_id; protected: typedef std::set expr_sett; typedef std::map expr_mapt; - typedef std::map index_sett; virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); - // Find the string expression corresponding to a string symbol - exprt expr_symbol(const exprt &expr); virtual bvt convert_struct(const struct_exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); virtual void check_SAT(); + // fills as many 0 as necessary in the bit vectors to have the right width bvt convert_bool_bv(const exprt &boole, const exprt &orig); // The following functions convert different string functions to @@ -133,72 +163,54 @@ class string_refinementt: public bv_refinementt bvt convert_string_equal(const function_application_exprt &f); bvt convert_string_copy(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); - bvt convert_string_substring(const function_application_exprt &f); bvt convert_string_is_prefix(const function_application_exprt &f); bvt convert_string_is_suffix(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); - bvt convert_string_char_set(const function_application_exprt &f); - - bool boolbv_set_equality_to_true(const equal_exprt &expr); - void add_instantiations(bool first=false); - bool check_axioms(); - void update_index_set(const exprt &formula); - void update_index_set(const string_axiomt &axiom); - exprt instantiate(const string_axiomt &axiom, const exprt &str, - const exprt &val); - void add_lemma(const exprt &lemma); - void add_lemmas(axiom_vect & lemmas); - + // Boolean symbols that are used to know whether the results + // of some functions should be true. + std::vector boolean_symbols; + axiom_vect string_axioms; // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. string_exprt make_string(const exprt &str); + // Same thing but associates the string to the given symbol instead // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); - // Gives the character corresponding to an expression - exprt make_char(const exprt &chr); + bool boolbv_set_equality_to_true(const equal_exprt &expr); - // Get the expression corresponding to the length of a string - // The string should have type string_type. - exprt expr_length(const exprt &str); - // Get the expression corresponding to the content of a string - exprt expr_content(const exprt &str); + void add_lemma(const exprt &lemma); + void add_lemmas(axiom_vect & lemmas); - /* - inline bvt bv_length(bvt string_bv) - { return bv_component(string_bv, "length",string_type.get_length_type()); } + void add_instantiations(bool first=false); + bool check_axioms(); - inline bvt bv_content(bvt string_bv) - { return bv_component(string_bv, "content",string_type.get_length_type()); } - */ + // See the definition in the PASS article + // this is indexed by array_expressions + std::map index_set; - //symbol_exprt symbol_length(const exprt & str); - symbol_exprt symbol_content(const exprt & str); + // Add to the index set all the indices that appear in the formula + void update_index_set(const exprt &formula); + void update_index_set(const string_axiomt &axiom); + //takes an universaly quantified formula [axiom], a array of char variable [s], + // and an index expression [val]. + // Computes one index [v1] in which [axiom.idx] appears, takes the + // corresponding substitition [r] (obtained with [compute_subst]). + // Then substitutes [axiom.idx] with [r] in [axiom]. + exprt instantiate(const string_axiomt &axiom, const exprt &str, + const exprt &val); - // Get a model of the given array + // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); - irep_idt string_literal_func; - irep_idt char_literal_func; - irep_idt string_length_func; - irep_idt string_equal_func; - irep_idt string_copy_func; - irep_idt string_char_at_func; - irep_idt string_concat_func; - irep_idt string_substring_func; - irep_idt string_is_prefix_func; - irep_idt string_is_suffix_func; - irep_idt string_char_set_func; - axiom_vect string_axioms; expr_sett strings; expr_sett seen_instances; - index_sett index_set; std::vector cur; From 653ae6ce16ac5e5282ef26d7deb6c048946a2bfd Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 12 Aug 2016 13:57:35 +0100 Subject: [PATCH 037/221] corrected the problem with infinite loops and some missing conversion for functions that return Boolean values --- regression/strings/test3.1/test.c | 3 +- src/solvers/refinement/string_refinement.cpp | 237 ++++++++++++++++--- src/solvers/refinement/string_refinement.h | 4 + 3 files changed, 205 insertions(+), 39 deletions(-) diff --git a/regression/strings/test3.1/test.c b/regression/strings/test3.1/test.c index 7f7d34fa30f..e0d408322be 100644 --- a/regression/strings/test3.1/test.c +++ b/regression/strings/test3.1/test.c @@ -9,8 +9,7 @@ int main() s = __CPROVER_string_concat(s2, s3); __CPROVER_assume(__CPROVER_string_length(s2) == i); - __CPROVER_assume( - __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + __CPROVER_assume(__CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); // proving the assertions individually seems to be much faster assert(__CPROVER_string_length(s) == i + 5); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 78e405a6c61..f8b98d71eed 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -342,9 +342,151 @@ bvt string_refinementt::convert_struct(const struct_exprt &expr) return SUB::convert_struct(expr); } +/* +void string_refinementt::set_to(const exprt &expr, bool value) +{ + debug() << "string_refinementt::set_to" << eom; + assert(expr.type().id()==ID_bool); + + + bool boolean=true; + + forall_operands(it, expr) + if(it->type().id()!=ID_bool) + { + boolean=false; + break; + } + + debug() << "string_refinementt::set_to boolean " << boolean << eom; + if(boolean) + { + if(expr.id()==ID_not) + { + if(expr.operands().size()==1) + { + set_to(expr.op0(), !value); + return; + } + } + else + { + if(value) + { + debug() << "set_to_true" << eom; + + if(expr.id()==ID_and) + { + debug() << "and" << eom; + forall_operands(it, expr) + set_to_true(*it); + + return; + } + else if(expr.id()==ID_or) + { + debug() << "or" << eom; + // Special case for a CNF-clause, + // i.e., a constraint that's a disjunction. + + if(expr.operands().size()>0) + { + bvt bv; + bv.reserve(expr.operands().size()); + + forall_operands(it, expr) + bv.push_back(convert(*it)); + + prop.lcnf(bv); + return; + } + } + else if(expr.id()==ID_implies) + { + debug() << "implies" << eom; + if(expr.operands().size()==2) + { + literalt l0=convert(expr.op0()); + literalt l1=convert(expr.op1()); + prop.lcnf(!l0, l1); + return; + } + } + else if(expr.id()==ID_equal) + { + if(!set_equality_to_true(to_equal_expr(expr))) + return; + } + } + else + { + debug() << "set_to_false" << eom; + if(expr.id()==ID_implies) // !(a=>b) == (a && !b) + { + assert(expr.operands().size()==2); + set_to_true(expr.op0()); + set_to_false(expr.op1()); + return; + } + else if(expr.id()==ID_or) // !(a || b) == (!a && !b) + { + forall_operands(it, expr) + set_to_false(*it); + return; + } + } + } + } + + debug() << "fall back to convert" << eom; + prop.l_set_to(convert(expr), value); + +} + + + +bool string_refinementt::set_equality_to_true(const equal_exprt &expr) +{ + debug() << "set equality to true " << expr << eom; + + if(!equality_propagation) return true; + if(expr.lhs().id()==ID_symbol) + { + const irep_idt &identifier= + to_symbol_expr(expr.lhs()).get_identifier(); + + debug() << "This needs to be changed: [[[ " << eom; + literalt tmp=convert(expr.rhs()); + debug() << "]]] " << eom; + + std::pair result= + symbols.insert(std::pair(identifier, tmp)); + + if(result.second) return false; + } + + return true; +} +*/ + +literalt string_refinementt::convert_rest(const exprt &expr) +{ + debug() << "string_refinementt::convert_rest(" << expr << ")" << eom; + if(expr.id()==ID_function_application) + { + bvt bv = convert_function_application(to_function_application_expr(expr)); + assert(bv.size() == 1); + return bv[0]; + } + else + return SUB::convert_rest(expr); +} + bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { + debug() << "string_refinementt::boolbv_set_equality_to_true "; + if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); @@ -353,6 +495,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { + debug() << pretty_short(expr.lhs()) << " == " << pretty_short(expr.rhs()) << eom; if(is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); @@ -405,8 +548,10 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_function_application( const function_application_exprt &expr) { + debug() << "string_refinementt::convert_function_application ..." << eom; const exprt &name = expr.function(); + if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); debug() << "string_refinementt::convert_function_application(" @@ -460,7 +605,7 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { - debug() << "adding lemma " << lemma << eom; + debug() << "adding lemma " << eom; //lemma << eom; prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } @@ -661,6 +806,8 @@ bvt string_refinementt::convert_string_char_at( // PASS Algorithm // //////////////////// +// We compute the index set for all formulas, instantiate the formulas +// with the found indexes, and add them as lemmas. void string_refinementt::add_instantiations(bool first) { debug() << "string_refinementt::add_instantiations" << eom; @@ -675,27 +822,34 @@ void string_refinementt::add_instantiations(bool first) cur.clear(); + //debug() << "going through the index set:" << eom; for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { const exprt &s = i->first; + //debug() << pretty_short(s) << " : "; + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) { const exprt &val = *j; + //debug() << val << " ; "; + for (size_t k = 0; k < string_axioms.size(); ++k) { exprt lemma = instantiate(string_axioms[k], s, val); if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { add_lemma(lemma); } } + } + //debug() << eom; } } exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { - debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) - << "," << size.get(ID_value) << ")" << eom; + //debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) + //<< "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); if(val.id() == "array-list") { @@ -744,27 +898,27 @@ bool string_refinementt::check_axioms() fmodel[elength] = len; fmodel[econtent] = arr; - debug() << "check_axioms: " << it->first << " := " << arr << eom; + //debug() << "check_axioms: " << it->first << " := " << arr << eom; } for(std::vector::iterator it = boolean_symbols.begin(); it != boolean_symbols.end(); it++) { - debug() << "check_axioms: " << *it << " := " << get(*it) << eom; + debug() << "check_axioms boolean_symbol: " << *it << eom; + // " := " << get(*it) << eom; fmodel[*it] = get(*it); } std::vector< std::pair > violated; + debug() << "there are " << string_axioms.size() << " string axioms" << eom; for (size_t i = 0; i < string_axioms.size(); ++i) { - debug() << "string axiom " << i << eom; const string_axiomt &axiom = string_axioms[i]; - exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); - debug() << "string axiom = " << axiom.to_string() << eom; - debug() << "neg axiom = " << negaxiom.pretty() << eom; + //debug() << "string axiom = " << axiom.to_string() << eom; + //debug() << "neg axiom = " << negaxiom.pretty() << eom; satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); @@ -790,8 +944,10 @@ bool string_refinementt::check_axioms() return true; } + bool all_seen = true; + + debug() << violated.size() << " string axioms can be violated" << eom; for (size_t i = 0; i < violated.size(); ++i) { - debug() << "violated " << i << eom; const exprt &val = violated[i].second; const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); @@ -801,11 +957,12 @@ bool string_refinementt::check_axioms() implies_exprt instance(premise, body); if (seen_instances.insert(instance).second) { add_lemma(instance); - } + all_seen = false; + } else debug() << "instance already seen" << eom; // TODO - add backwards instantiations } - return false; + return all_seen; } @@ -836,10 +993,11 @@ namespace { - ////////////////////////////////////////////////////////// // For expressions f of a certain form, // // returns an expression corresponding to $f^{−1}(val)$.// + // i.e. the value that is necessary for qvar for f to // + // be equal to val. // // Takes an expression containing + and − operations // // in which qvar appears exactly once. // // Rewrites it as a sum of qvar and elements in list // @@ -848,15 +1006,20 @@ namespace { ////////////////////////////////////////////////////////// exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { - //std::cout << "string_refinement::compute_subst" << std::endl ; - std::vector< std::pair > to_process, elems; - to_process.push_back(std::make_pair(f, true)); + std::vector< std::pair > to_process; + + // number of time the element should be added (can be negative) + std::map< exprt, int> elems; + // qvar has to be equal to val - f(0) if it appears positively in f + // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively + // in f. So we start by computing val - f(0). + to_process.push_back(std::make_pair(val,true)); + to_process.push_back(std::make_pair(f, false)); while (!to_process.empty()) { exprt cur = to_process.back().first; bool positive = to_process.back().second; to_process.pop_back(); - // std::cout << "processing " << cur.pretty() << std::endl; if (cur.id() == ID_plus) { to_process.push_back(std::make_pair(cur.op1(), positive)); to_process.push_back(std::make_pair(cur.op0(), positive)); @@ -866,32 +1029,37 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } else if (cur.id() == ID_unary_minus) { to_process.push_back(std::make_pair(cur.op0(), !positive)); } else { - elems.push_back(std::make_pair(cur, positive)); + if(positive) elems[cur] = elems[cur]+1; + else elems[cur] = elems[cur] - 1; } } exprt ret = nil_exprt(); bool found = false; - bool neg = false; + bool neg = false; // true if qvar appears negatively - for (size_t i = 0; (i < elems.size()) ; ++i) { - exprt &t = elems[i].first; + for (std::map::iterator it = elems.begin(); + it != elems.end(); it++) { + const exprt &t = it->first; if (t == qvar) { + assert(it->second == 1 || it->second == -1); assert(!found); found = true; - neg = !elems[i].second; + neg = (it->second == -1); } else { - if (!elems[i].second) { - t = unary_minus_exprt(t); + if (it->second == 0) { + } else if (it->second == -1) { + if(ret.is_nil()) ret = unary_minus_exprt(t); + else ret = minus_exprt(ret, t); + } else if (it->second == 1) { + if(ret.is_nil()) ret = t; + else ret = plus_exprt(ret, t); } - ret = (ret.is_nil())?t:plus_exprt(ret, t); } } - + assert(found); - ret = (ret.is_nil())?val:minus_exprt(val, ret); - - if (neg) return unary_minus_exprt(ret); + if (neg && !ret.is_nil()) return unary_minus_exprt(ret); else return ret; } @@ -938,11 +1106,7 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) // if cur is of the form s[i] and qvar does not appear in i... if(!find_qvar(i,axiom.qvar)) { assert(s.type() == string_type.get_content_type()); - //debug() << "map_content_to_string " << s << eom; - //string_exprt str = string_exprt::by_content(s); - //debug() << " --> " << str << eom; expr_sett &idxs = index_set[s]; - // we add the bounds to the index set idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); } @@ -966,9 +1130,7 @@ void string_refinementt::update_index_set(const exprt &formula) if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - //debug() << "map_content_to_string " << s << eom; - //string_exprt str = string_exprt::by_content(s); - //debug() << " --> " << str << eom; + assert(s.type() == string_type.get_content_type()); index_set[s].insert(i); } else { forall_operands(it, cur) { @@ -1012,7 +1174,6 @@ exprt find_index(const exprt & expr, const exprt & str) { exprt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { - //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; exprt idx = find_index(axiom.body,str); if(idx.is_nil()) return nil_exprt(); if(!find_qvar(idx,axiom.qvar)) return nil_exprt(); @@ -1022,8 +1183,10 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, exprt body(axiom.body); // replace_expr(what,by,dest) replaces in dest all occurances of [what] // by expression [by] + //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; implies_exprt instance(premise, body); replace_expr(axiom.qvar, r, instance); + //debug() << "== replaced instance : " << instance.pretty() << eom; return instance; } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 964decc4a06..4cc5743af86 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -181,7 +181,10 @@ class string_refinementt: public bv_refinementt // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); + //void set_to(const exprt &expr, bool value); bool boolbv_set_equality_to_true(const equal_exprt &expr); + //bool set_equality_to_true(const equal_exprt &expr); + literalt convert_rest(const exprt &expr); void add_lemma(const exprt &lemma); void add_lemmas(axiom_vect & lemmas); @@ -212,6 +215,7 @@ class string_refinementt: public bv_refinementt expr_sett strings; expr_sett seen_instances; + // current set of lemmas (unquantified) std::vector cur; }; From 30c1b785424f5651866178a3e55d3353accee9a9 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 12 Aug 2016 14:05:34 +0100 Subject: [PATCH 038/221] removed some debugging information that should no longer be needed --- src/solvers/refinement/string_refinement.cpp | 177 +------------------ src/solvers/refinement/string_refinement.h | 1 - 2 files changed, 2 insertions(+), 176 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f8b98d71eed..3e83ff48e77 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -122,26 +122,11 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -// finds the string from which the content expression comes -std::map map_content_to_string; - -/* -string_exprt & string_exprt::by_content (const exprt & content) -{ return *(map_content_to_string.at(content.get_identifier())); } - -void associate_content (string_exprt * str, const exprt & content) -{ - std::cout << "associate " << pretty_short(content) << " to " << pretty_short(*str) << std::endl; - map_content_to_string[content]=str; -} -*/ - string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { string_ref_typet t; assert(length.type() == index_type); assert(content.type() == t.get_content_type()); - //associate_content(this,content); move_to_operands(length,content); } @@ -150,7 +135,6 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) string_ref_typet t; symbol_exprt length = string_refinementt::fresh_symbol("string_length",index_type); symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); - //associate_content(this,content); move_to_operands(length,content); } @@ -214,9 +198,6 @@ axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) const exprt &s = arg.op0().op0().op0(); irep_idt sval = to_string_constant(s).get_value(); - // debug() << - std::cout << "string_exprtt::convert_string_literal(" << sval << ")" << std::endl; - for (std::size_t i = 0; i < sval.size(); ++i) { std::string idx_binary = integer2binary(i,INDEX_WIDTH); constant_exprt idx(idx_binary, index_type); @@ -253,7 +234,6 @@ axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); - //string_axiomt a1(string_axioms.size()); string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), equal_exprt(index_exprt(s1.content(), idx), index_exprt(content(), idx))); @@ -336,142 +316,8 @@ void string_refinementt::post_process() SUB::post_process(); } -bvt string_refinementt::convert_struct(const struct_exprt &expr) -{ - debug() << "string_refinementt::convert_struct" << eom; - return SUB::convert_struct(expr); -} - -/* -void string_refinementt::set_to(const exprt &expr, bool value) -{ - debug() << "string_refinementt::set_to" << eom; - assert(expr.type().id()==ID_bool); - - - bool boolean=true; - - forall_operands(it, expr) - if(it->type().id()!=ID_bool) - { - boolean=false; - break; - } - - debug() << "string_refinementt::set_to boolean " << boolean << eom; - if(boolean) - { - if(expr.id()==ID_not) - { - if(expr.operands().size()==1) - { - set_to(expr.op0(), !value); - return; - } - } - else - { - if(value) - { - debug() << "set_to_true" << eom; - - if(expr.id()==ID_and) - { - debug() << "and" << eom; - forall_operands(it, expr) - set_to_true(*it); - - return; - } - else if(expr.id()==ID_or) - { - debug() << "or" << eom; - // Special case for a CNF-clause, - // i.e., a constraint that's a disjunction. - - if(expr.operands().size()>0) - { - bvt bv; - bv.reserve(expr.operands().size()); - - forall_operands(it, expr) - bv.push_back(convert(*it)); - - prop.lcnf(bv); - return; - } - } - else if(expr.id()==ID_implies) - { - debug() << "implies" << eom; - if(expr.operands().size()==2) - { - literalt l0=convert(expr.op0()); - literalt l1=convert(expr.op1()); - prop.lcnf(!l0, l1); - return; - } - } - else if(expr.id()==ID_equal) - { - if(!set_equality_to_true(to_equal_expr(expr))) - return; - } - } - else - { - debug() << "set_to_false" << eom; - if(expr.id()==ID_implies) // !(a=>b) == (a && !b) - { - assert(expr.operands().size()==2); - set_to_true(expr.op0()); - set_to_false(expr.op1()); - return; - } - else if(expr.id()==ID_or) // !(a || b) == (!a && !b) - { - forall_operands(it, expr) - set_to_false(*it); - return; - } - } - } - } - - debug() << "fall back to convert" << eom; - prop.l_set_to(convert(expr), value); - -} - - - -bool string_refinementt::set_equality_to_true(const equal_exprt &expr) -{ - debug() << "set equality to true " << expr << eom; - - if(!equality_propagation) return true; - if(expr.lhs().id()==ID_symbol) - { - const irep_idt &identifier= - to_symbol_expr(expr.lhs()).get_identifier(); - - debug() << "This needs to be changed: [[[ " << eom; - literalt tmp=convert(expr.rhs()); - debug() << "]]] " << eom; - - std::pair result= - symbols.insert(std::pair(identifier, tmp)); - - if(result.second) return false; - } - - return true; -} -*/ - literalt string_refinementt::convert_rest(const exprt &expr) { - debug() << "string_refinementt::convert_rest(" << expr << ")" << eom; if(expr.id()==ID_function_application) { bvt bv = convert_function_application(to_function_application_expr(expr)); @@ -495,7 +341,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - debug() << pretty_short(expr.lhs()) << " == " << pretty_short(expr.rhs()) << eom; if(is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); @@ -521,8 +366,6 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; - debug() << "string_refinementt::convert_symbol(" << identifier << ")" << eom; - if (is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality @@ -548,10 +391,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_function_application( const function_application_exprt &expr) { - debug() << "string_refinementt::convert_function_application ..." << eom; const exprt &name = expr.function(); - if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); debug() << "string_refinementt::convert_function_application(" @@ -605,7 +446,7 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { - debug() << "adding lemma " << eom; //lemma << eom; + debug() << "adding lemma" << eom; prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } @@ -684,18 +525,12 @@ bvt string_refinementt::convert_string_length( { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string length? - debug() << "string_refinementt::convert_string_length(" - << pretty_short(args[0]) << " ) " << eom; - string_exprt str = make_string(args[0]); exprt length = str.length(); bvt bv = convert_bv(length); return bv; } - - - bvt string_refinementt::convert_string_is_prefix( const function_application_exprt &f) { @@ -860,9 +695,7 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; assert(index.type() == index_type); - //typecast_exprt idx(tmp_index, index_type); exprt value = val.operands()[i*2+1]; - //typecast_exprt value(tmp_value, char_type); assert(value.type() == char_type); ret = with_exprt(ret, index, value); } @@ -917,9 +750,6 @@ bool string_refinementt::check_axioms() exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); - //debug() << "string axiom = " << axiom.to_string() << eom; - //debug() << "neg axiom = " << negaxiom.pretty() << eom; - satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); solver << negaxiom; @@ -1181,12 +1011,9 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, exprt r = compute_subst(axiom.qvar, val, idx); exprt premise(axiom.premise); exprt body(axiom.body); - // replace_expr(what,by,dest) replaces in dest all occurances of [what] - // by expression [by] - //debug() << "string_refinementt::instantiate(" << axiom.to_string() << ")" << eom; + //debug() << "string_refinementt::instantiate : replaces occurances of" << axiom.qvar << " by " << instance << " in " << axiom.to_string() << eom; implies_exprt instance(premise, body); replace_expr(axiom.qvar, r, instance); - //debug() << "== replaced instance : " << instance.pretty() << eom; return instance; } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 4cc5743af86..d7ebaa7d9c9 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -149,7 +149,6 @@ class string_refinementt: public bv_refinementt virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); - virtual bvt convert_struct(const struct_exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); virtual void check_SAT(); From 0a489c795051066852adb3fc08d807d7e708dcb4 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 12 Aug 2016 14:06:16 +0100 Subject: [PATCH 039/221] removed some debugging information that should no longer be needed --- src/solvers/refinement/string_refinement.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 3e83ff48e77..f4a5c3846e6 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -331,8 +331,6 @@ literalt string_refinementt::convert_rest(const exprt &expr) bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { - debug() << "string_refinementt::boolbv_set_equality_to_true "; - if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); From 2888fc25fb571f952f3db4d9dfc672385ff0b2c7 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 12 Aug 2016 15:57:54 +0100 Subject: [PATCH 040/221] corrected a sign problem in the computation of the substitution --- src/solvers/refinement/string_refinement.cpp | 92 +++++++++++--------- src/solvers/refinement/string_refinement.h | 13 ++- 2 files changed, 64 insertions(+), 41 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f4a5c3846e6..af6bc3fd3d7 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -235,14 +235,16 @@ axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), - equal_exprt(index_exprt(s1.content(), idx), + equal_exprt(s1[idx], index_exprt(content(), idx))); axioms.push_back(a1); - string_axiomt a2(idx, binary_relation_exprt(idx, ID_lt, s2.length()), - equal_exprt(index_exprt(s2.content(), idx), + symbol_exprt idx2 = string_refinementt::fresh_symbol("index", index_type); + + string_axiomt a2(idx, binary_relation_exprt(idx2, ID_lt, s2.length()), + equal_exprt(s2[idx2], index_exprt(content(), - plus_exprt(s1.length(), idx)))); + plus_exprt(s1.length(), idx2)))); axioms.push_back(a2); return axioms; } @@ -444,7 +446,7 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { - debug() << "adding lemma" << eom; + debug() << "adding lemma " << lemma.pretty() << eom; prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } @@ -500,12 +502,13 @@ bvt string_refinementt::convert_string_equal( // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) symbol_exprt witness = fresh_symbol("index", index_type); + symbol_exprt qvar = fresh_symbol("qvar", index_type); add_lemma(implies_exprt(eq, equal_exprt(s1.length(), s2.length()))); - string_axioms.emplace_back(witness, - and_exprt(eq, s1 > witness), - equal_exprt(s1[witness],s2[witness])); + string_axioms.emplace_back(qvar, + and_exprt(eq, s1 > qvar), + equal_exprt(s1[qvar],s2[qvar])); implies_exprt lemma2(not_exprt(eq), @@ -543,12 +546,14 @@ bvt string_refinementt::convert_string_is_prefix( bvt bv = convert_bv(isprefix); add_lemma(implies_exprt(isprefix, s0 >= s1)); + + symbol_exprt qvar = fresh_symbol("qvar", index_type); + string_axioms.emplace_back(qvar, and_exprt(isprefix, s1 > qvar), + equal_exprt(s1[qvar],s0[qvar])); symbol_exprt witness = fresh_symbol("index", index_type); // forall witness < s1.length. isprefix => s1[witness] = s2[witness] - string_axioms.emplace_back(witness, and_exprt(isprefix, s1 > witness), - equal_exprt(s1[witness],s0[witness])); or_exprt s1_notpref_s0(not_exprt(s0 >= s1), and_exprt(s1 > witness, @@ -576,16 +581,21 @@ bvt string_refinementt::convert_string_is_suffix( // issufix => s1[witness] = s0[witness + s0.length - s1.length] // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - symbol_exprt witness = fresh_symbol("index", index_type); + symbol_exprt qvar = fresh_symbol("qvar", index_type); add_lemma(implies_exprt(issuffix, s0 >= s1)); + + exprt qvar_shifted = plus_exprt(qvar, + minus_exprt(s0.length(), s1.length())); + string_axioms.emplace_back(qvar, and_exprt(issuffix, s1 > qvar), + equal_exprt(s1[qvar],s0[qvar_shifted])); + + symbol_exprt witness = fresh_symbol("index", index_type); + exprt shifted = plus_exprt(witness, minus_exprt(s0.length(), s1.length())); - string_axioms.emplace_back(witness, and_exprt(issuffix, s1 > witness), - equal_exprt(s1[witness],s0[shifted])); - implies_exprt lemma2(not_exprt(issuffix), or_exprt(s1 > s0, and_exprt(s1 > witness, @@ -655,16 +665,16 @@ void string_refinementt::add_instantiations(bool first) cur.clear(); - //debug() << "going through the index set:" << eom; + debug() << "going through the index set:" << eom; for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { const exprt &s = i->first; - //debug() << pretty_short(s) << " : "; + debug() << pretty_short(s) << " ---- " << eom; for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) { const exprt &val = *j; - //debug() << val << " ; "; + debug() << "val " << val << " : " << eom; for (size_t k = 0; k < string_axioms.size(); ++k) { exprt lemma = instantiate(string_axioms[k], s, val); @@ -674,7 +684,7 @@ void string_refinementt::add_instantiations(bool first) } } - //debug() << eom; + debug() << eom; } } @@ -732,9 +742,9 @@ bool string_refinementt::check_axioms() //debug() << "check_axioms: " << it->first << " := " << arr << eom; } - for(std::vector::iterator it = boolean_symbols.begin(); + for(std::vector::iterator it = boolean_symbols.begin(); it != boolean_symbols.end(); it++) { - debug() << "check_axioms boolean_symbol: " << *it << eom; + debug() << "check_axioms boolean_symbol: " << it->get_identifier() << eom; // " := " << get(*it) << eom; fmodel[*it] = get(*it); } @@ -775,6 +785,7 @@ bool string_refinementt::check_axioms() bool all_seen = true; debug() << violated.size() << " string axioms can be violated" << eom; + for (size_t i = 0; i < violated.size(); ++i) { const exprt &val = violated[i].second; const string_axiomt &axiom = string_axioms[violated[i].first]; @@ -819,21 +830,13 @@ namespace { } } +} // namespace - ////////////////////////////////////////////////////////// - // For expressions f of a certain form, // - // returns an expression corresponding to $f^{−1}(val)$.// - // i.e. the value that is necessary for qvar for f to // - // be equal to val. // - // Takes an expression containing + and − operations // - // in which qvar appears exactly once. // - // Rewrites it as a sum of qvar and elements in list // - // elems different from qvar. // - // Takes e minus the sum of the element in elems. // - ////////////////////////////////////////////////////////// -exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { + + std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; std::vector< std::pair > to_process; // number of time the element should be added (can be negative) @@ -864,16 +867,17 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) exprt ret = nil_exprt(); bool found = false; - bool neg = false; // true if qvar appears negatively + bool neg = false; // true if qvar appears negatively in f, ie positively in the elements for (std::map::iterator it = elems.begin(); it != elems.end(); it++) { const exprt &t = it->first; if (t == qvar) { - assert(it->second == 1 || it->second == -1); - assert(!found); - found = true; - neg = (it->second == -1); + if(it->second == 1 || it->second == -1){ + found = true; + neg = (it->second == 1); + } else + std::cout << "in compute_subst: warning: occurences of qvar canceled out " << std::endl; } else { if (it->second == 0) { } else if (it->second == -1) { @@ -886,12 +890,16 @@ exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f) } } - assert(found); + if (!found) { + // we should add a lemma to say that val == f + debug() << "not sure we need to add a lemma: " << eom; + //add_lemma(equal_exprt(val,f)); + return qvar; + } if (neg && !ret.is_nil()) return unary_minus_exprt(ret); else return ret; } -} // namespace class find_qvar_visitor: public const_expr_visitort { @@ -937,6 +945,7 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) expr_sett &idxs = index_set[s]; idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); + debug() << "update_index_set(" << axiom.to_string() << ") -> i: " << i << eom; } } else { forall_operands(it, cur) { @@ -960,6 +969,7 @@ void string_refinementt::update_index_set(const exprt &formula) const exprt &i = cur.op1(); assert(s.type() == string_type.get_content_type()); index_set[s].insert(i); + debug() << "update_index_set(formula " << formula.pretty() << ") -> i: " << i << eom ; } else { forall_operands(it, cur) { to_process.push_back(*it); @@ -1003,14 +1013,16 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { exprt idx = find_index(axiom.body,str); + // what if idx is qvar or if there are several indexes? if(idx.is_nil()) return nil_exprt(); if(!find_qvar(idx,axiom.qvar)) return nil_exprt(); exprt r = compute_subst(axiom.qvar, val, idx); exprt premise(axiom.premise); exprt body(axiom.body); - //debug() << "string_refinementt::instantiate : replaces occurances of" << axiom.qvar << " by " << instance << " in " << axiom.to_string() << eom; implies_exprt instance(premise, body); + + debug() << "string_refinementt::instantiate : replaces occurances of" << axiom.qvar << " by " << r << " in " << instance << eom; replace_expr(axiom.qvar, r, instance); return instance; } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index d7ebaa7d9c9..74da3e239f2 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -169,7 +169,7 @@ class string_refinementt: public bv_refinementt // Boolean symbols that are used to know whether the results // of some functions should be true. - std::vector boolean_symbols; + std::vector boolean_symbols; axiom_vect string_axioms; // Create a new string expression and add the necessary lemma @@ -207,6 +207,17 @@ class string_refinementt: public bv_refinementt exprt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); + // For expressions f of a certain form, // + // returns an expression corresponding to $f^{−1}(val)$.// + // i.e. the value that is necessary for qvar for f to // + // be equal to val. // + // Takes an expression containing + and − operations // + // in which qvar appears exactly once. // + // Rewrites it as a sum of qvar and elements in list // + // elems different from qvar. // + // Takes e minus the sum of the element in elems. // + exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); + // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); From d03aac05c72d8d252352ebf141a1b170fb2c5b03 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 12 Aug 2016 22:33:10 +0100 Subject: [PATCH 041/221] avoid creating new string symbols when there is no need for it --- src/solvers/refinement/string_refinement.cpp | 113 ++++++++++--------- src/solvers/refinement/string_refinement.h | 21 ++-- 2 files changed, 68 insertions(+), 66 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index af6bc3fd3d7..ac0034b6af3 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -122,6 +122,7 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } +/* string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) { string_ref_typet t; @@ -129,6 +130,7 @@ string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_re assert(content.type() == t.get_content_type()); move_to_operands(length,content); } +*/ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { @@ -139,31 +141,35 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) } -string_exprt::string_exprt(symbol_exprt sym) : string_exprt() +string_exprt::string_exprt(const symbol_exprt & sym) : string_exprt() { symbol_to_string[sym.get_identifier()] = *this; } -axiom_vect string_exprt::of_expr(exprt unrefined_string) +string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & axioms) { - if(unrefined_string.id()==ID_function_application) - return of_function_application(to_function_application_expr(unrefined_string)); + if(unrefined_string.id()==ID_function_application) { + string_exprt s; + s.of_function_application(to_function_application_expr(unrefined_string), axioms); + return s; + } else if(unrefined_string.id()==ID_symbol) { - return of_symbol(to_symbol_expr(unrefined_string)); + return symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; + //return of_symbol(to_symbol_expr(unrefined_string)); } - else + else { + std:: cout << "of_expr( " << unrefined_string.pretty() << std::endl; throw "string_exprt of something else than function application not implemented"; + } } -axiom_vect string_exprt::of_symbol(const symbol_exprt & expr) { - axiom_vect lemmas; +void string_exprt::of_symbol(const symbol_exprt & expr, axiom_vect & axioms) { string_exprt s = symbol_to_string[expr.get_identifier()]; - lemmas.push_back(string_axiomt(equal_exprt(s.content(),content()))); - lemmas.push_back(string_axiomt(equal_exprt(s.length(),length()))); - return lemmas; + axioms.push_back(string_axiomt(equal_exprt(s.content(),content()))); + axioms.push_back(string_axiomt(equal_exprt(s.length(),length()))); } -axiom_vect string_exprt::of_function_application(const function_application_exprt & expr) +void string_exprt::of_function_application(const function_application_exprt & expr, axiom_vect & axioms) { const exprt &name = expr.function(); if (name.id() == ID_symbol) { @@ -171,24 +177,23 @@ axiom_vect string_exprt::of_function_application(const function_application_expr std::cout << "string_exprt::of_function_application(" << id << ")" << std::endl; if (id == "__CPROVER_uninterpreted_string_literal") { - return of_string_literal(expr); + return of_string_literal(expr,axioms); } else if (id == "__CPROVER_uninterpreted_strcat") { - return of_string_concat(expr); + return of_string_concat(expr,axioms); } else if (id == "__CPROVER_uninterpreted_substring") { - return of_string_substring(expr); + return of_string_substring(expr,axioms); } else if (id == "__CPROVER_uninterpreted_char_set") { - return of_string_char_set(expr); + return of_string_char_set(expr,axioms); } } throw "non string function"; } - -axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) + +void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string literal? const exprt &arg = args[0]; - axiom_vect lemmas; assert (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && @@ -204,59 +209,56 @@ axiom_vect string_exprt::of_string_literal(const function_application_exprt &f) std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); - lemmas.push_back(string_axiomt(lemma)); + axioms.push_back(string_axiomt(lemma)); } std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, index_type); - lemmas.push_back(string_axiomt(equal_exprt(length(),s_length))); - return lemmas; + axioms.push_back(string_axiomt(equal_exprt(length(),s_length))); } +constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); -axiom_vect string_exprt::of_string_concat(const function_application_exprt &f) +void string_exprt::of_string_concat(const function_application_exprt &f, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string concat - string_exprt s1,s2; - axiom_vect axioms = s1.of_expr(args[0]); - axiom_vect s2axioms = s2.of_expr(args[1]); - axioms.insert(axioms.end(), s2axioms.begin(), s2axioms.end()); + string_exprt s1 = string_exprt::of_expr(args[0],axioms); + string_exprt s2 = string_exprt::of_expr(args[1],axioms); equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.push_back(string_axiomt(length_sum_lem)); - binary_relation_exprt lem1(length(), ID_ge, s1.length()); + // We can run into problems if the length of the string exceed 32 bits? + /*binary_relation_exprt lem1(length(), ID_ge, s1.length()); axioms.push_back(string_axiomt(lem1)); binary_relation_exprt lem2(length(), ID_ge, s2.length()); - axioms.push_back(string_axiomt(lem2)); + axioms.push_back(string_axiomt(lem2));*/ symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), equal_exprt(s1[idx], index_exprt(content(), idx))); - axioms.push_back(a1); symbol_exprt idx2 = string_refinementt::fresh_symbol("index", index_type); - string_axiomt a2(idx, binary_relation_exprt(idx2, ID_lt, s2.length()), + string_axiomt a2(idx2, binary_relation_exprt(idx2, ID_lt, s2.length()), equal_exprt(s2[idx2], index_exprt(content(), - plus_exprt(s1.length(), idx2)))); + plus_exprt(idx2,s1.length())))); axioms.push_back(a2); - return axioms; + axioms.push_back(a1); } -axiom_vect string_exprt::of_string_substring -(const function_application_exprt &expr) +void string_exprt::of_string_substring +(const function_application_exprt &expr, axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 3); // bad args to string substring? - string_exprt str; - axiom_vect axioms = str.of_expr(args[0]); + string_exprt str = of_expr(args[0],axioms); typecast_exprt i(args[1], index_type); typecast_exprt j(args[2], index_type); @@ -276,18 +278,15 @@ axiom_vect string_exprt::of_string_substring binary_relation_exprt lemma2(str.length(), ID_ge, length()); axioms.push_back(string_axiomt(lemma2)); - - return axioms; } -axiom_vect string_exprt::of_string_char_set -(const function_application_exprt &expr) +void string_exprt::of_string_char_set +(const function_application_exprt &expr,axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 3); //bad args to string_char_set? - string_exprt str; - axiom_vect axioms = str.of_expr(args[0]); + string_exprt str = of_expr(args[0],axioms); symbol_exprt c = string_refinementt::fresh_symbol("char", char_type); std::cout << "of_string_char_set : this has to be checked" << std::endl; @@ -301,7 +300,6 @@ axiom_vect string_exprt::of_string_char_set equal_exprt(length(), str.length()))); axioms.push_back(lemma); - return axioms; } @@ -464,17 +462,25 @@ void string_refinementt::add_lemmas(axiom_vect & lemmas) } } + + + void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { - string_exprt s(sym); - axiom_vect lemmas = s.of_expr(str); - add_lemmas(lemmas); + if(str.id()==ID_symbol) { + symbol_to_string[sym.get_identifier()] = symbol_to_string[to_symbol_expr(str).get_identifier()]; + } + else { + axiom_vect lemmas; + symbol_to_string[sym.get_identifier()] = string_exprt::of_expr(str,lemmas); + add_lemmas(lemmas); + } } string_exprt string_refinementt::make_string(const exprt & str) { - string_exprt s; - axiom_vect lemmas = s.of_expr(str); + axiom_vect lemmas; + string_exprt s = string_exprt::of_expr(str,lemmas); add_lemmas(lemmas); return s; } @@ -581,11 +587,10 @@ bvt string_refinementt::convert_string_is_suffix( // issufix => s1[witness] = s0[witness + s0.length - s1.length] // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - symbol_exprt qvar = fresh_symbol("qvar", index_type); add_lemma(implies_exprt(issuffix, s0 >= s1)); - + symbol_exprt qvar = fresh_symbol("qvar", index_type); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s0.length(), s1.length())); string_axioms.emplace_back(qvar, and_exprt(issuffix, s1 > qvar), @@ -807,7 +812,6 @@ bool string_refinementt::check_axioms() namespace { - constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); // Gets the upper bounds that are applied to [qvar], in the expression [expr] void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) @@ -836,7 +840,7 @@ namespace { exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { - std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; + //std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; std::vector< std::pair > to_process; // number of time the element should be added (can be negative) @@ -931,7 +935,6 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) std::vector to_process; to_process.push_back(axiom.body); - while (!to_process.empty()) { exprt cur = to_process.back(); to_process.pop_back(); @@ -945,7 +948,6 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) expr_sett &idxs = index_set[s]; idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); - debug() << "update_index_set(" << axiom.to_string() << ") -> i: " << i << eom; } } else { forall_operands(it, cur) { @@ -969,7 +971,6 @@ void string_refinementt::update_index_set(const exprt &formula) const exprt &i = cur.op1(); assert(s.type() == string_type.get_content_type()); index_set[s].insert(i); - debug() << "update_index_set(formula " << formula.pretty() << ") -> i: " << i << eom ; } else { forall_operands(it, cur) { to_process.push_back(*it); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 74da3e239f2..ddc43f15de5 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -61,17 +61,18 @@ class string_exprt : public struct_exprt { public: string_exprt(); - string_exprt(exprt length, exprt content); - string_exprt(symbol_exprt sym); + //string_exprt(exprt length, exprt content); + string_exprt(const symbol_exprt & sym); + //string_exprt(symbol_exprt sym, exprt unrefined_string); // returns a list of lemmas which should hold - axiom_vect of_expr(exprt unrefined_string); - axiom_vect of_function_application(const function_application_exprt &expr); - axiom_vect of_symbol(const symbol_exprt &expr); - axiom_vect of_string_literal(const function_application_exprt &expr); - axiom_vect of_string_concat(const function_application_exprt &expr); - axiom_vect of_string_substring(const function_application_exprt &expr); - axiom_vect of_string_char_set(const function_application_exprt &expr); + static string_exprt of_expr(const exprt & unrefined_string, axiom_vect & axioms); + void of_function_application(const function_application_exprt &expr, axiom_vect & axioms); + void of_symbol(const symbol_exprt &expr,axiom_vect &axioms); + void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); + void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); + void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); + void of_string_char_set(const function_application_exprt &expr,axiom_vect &axioms); inline const exprt & length() const { return op0();}; inline const exprt & content() const { return op1();}; @@ -99,7 +100,7 @@ class string_exprt : public struct_exprt { return static_cast(expr); } - static string_exprt & by_content (const exprt & content); + //static string_exprt & by_content (const exprt & content); }; string_exprt &to_string_expr(exprt expr); From 45c9d04a2ab56a74f959cc7a48b8dbb2dee75dd1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 09:38:28 +0100 Subject: [PATCH 042/221] adding instantiations before solving --- src/solvers/refinement/string_refinement.cpp | 43 ++++++++++++++++++-- src/solvers/refinement/string_refinement.h | 1 + 2 files changed, 40 insertions(+), 4 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ac0034b6af3..36fc68a598a 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -313,6 +313,8 @@ void string_exprt::of_string_char_set void string_refinementt::post_process() { debug() << "string_refinementt::post_process()" << eom; + add_instantiations(true); + SUB::post_process(); } @@ -694,10 +696,43 @@ void string_refinementt::add_instantiations(bool first) } +unsigned integer_of_expr(const constant_exprt & expr) { + return integer2unsigned(string2integer(as_string(expr.get_value()),2)); +} + +std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) +{ + unsigned n = integer_of_expr(to_constant_expr(size)); + if(n>500) return "array-too-big"; + if(n==0) return "\"\""; + unsigned str[n]; + exprt val = get(arr); + if(val.id() == "array-list") { + for (size_t i = 0; i < val.operands().size()/2; i++) { + exprt index = val.operands()[i*2]; + unsigned idx = integer_of_expr(to_constant_expr(index)); + if(idx < n){ + exprt value = val.operands()[i*2+1]; + str[idx] = integer_of_expr(to_constant_expr(value)); + } + } + } else { + debug() << "unable to get array-list value of " << pretty_short(val) << eom; + } + + std::ostringstream buf; + for(unsigned i = 0; i < n; i++) { + char c = (char) str[i]; + buf << c << ":"; + } + + return buf.str(); +} + exprt string_refinementt::get_array(const exprt &arr, const exprt &size) { //debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) - //<< "," << size.get(ID_value) << ")" << eom; + // << "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); if(val.id() == "array-list") { @@ -744,13 +779,12 @@ bool string_refinementt::check_axioms() fmodel[elength] = len; fmodel[econtent] = arr; - //debug() << "check_axioms: " << it->first << " := " << arr << eom; + debug() << "check_axioms: " << it->first << " = " << it->second << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = boolean_symbols.begin(); it != boolean_symbols.end(); it++) { - debug() << "check_axioms boolean_symbol: " << it->get_identifier() << eom; - // " := " << get(*it) << eom; + debug() << "check_axioms boolean_symbol: " << it->get_identifier() << " := " << get(*it) << eom; fmodel[*it] = get(*it); } @@ -807,6 +841,7 @@ bool string_refinementt::check_axioms() } return all_seen; + //return false; } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index ddc43f15de5..cb39592de5c 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -222,6 +222,7 @@ class string_refinementt: public bv_refinementt // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); + std::string string_of_array(const exprt &arr, const exprt &size); expr_sett strings; expr_sett seen_instances; From 7bf66a16d9ad337114105dc2af5f84c9cade6807 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 09:47:37 +0100 Subject: [PATCH 043/221] Adding new tests for strings --- regression/strings/test_strlen/test.c | 16 ++++++++++++++++ regression/strings/test_strlen/test.desc | 7 +++++++ 2 files changed, 23 insertions(+) create mode 100644 regression/strings/test_strlen/test.c create mode 100644 regression/strings/test_strlen/test.desc diff --git a/regression/strings/test_strlen/test.c b/regression/strings/test_strlen/test.c new file mode 100644 index 00000000000..89d826af6fb --- /dev/null +++ b/regression/strings/test_strlen/test.c @@ -0,0 +1,16 @@ +#include +#include "cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s,t; + unsigned len_s, len_t; + s = __CPROVER_string_literal("abc"); + t = __CPROVER_string_literal("xyz"); + len_s = __CPROVER_string_length(s); + len_t = __CPROVER_string_length(t); + int b = ( len_s == len_t ); + assert(b); + return 0; +} diff --git a/regression/strings/test_strlen/test.desc b/regression/strings/test_strlen/test.desc new file mode 100644 index 00000000000..0f5bd6ccca7 --- /dev/null +++ b/regression/strings/test_strlen/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--pass +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- From a690724a178d3072c90f48ea970676019533f9ee Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 11:53:22 +0100 Subject: [PATCH 044/221] adding index to the index set when we have a char_at function --- regression/strings/test3.2/test.c | 5 +-- regression/strings/test3.3/test.c | 1 + src/solvers/refinement/string_refinement.cpp | 45 ++++++++++++++------ src/solvers/refinement/string_refinement.h | 8 ++-- 4 files changed, 40 insertions(+), 19 deletions(-) diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c index c3e45997a48..3036a0deebf 100644 --- a/regression/strings/test3.2/test.c +++ b/regression/strings/test3.2/test.c @@ -11,12 +11,11 @@ int main() s = __CPROVER_string_concat(s2, s3); __CPROVER_assume(__CPROVER_string_length(s2) == i); - __CPROVER_assume( - __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + __CPROVER_assume(__CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); // proving the assertions individually seems to be much faster //assert(__CPROVER_string_length(s) == i + 5); - assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); //assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); return 0; diff --git a/regression/strings/test3.3/test.c b/regression/strings/test3.3/test.c index 4a705117209..35e25d82ee5 100644 --- a/regression/strings/test3.3/test.c +++ b/regression/strings/test3.3/test.c @@ -8,6 +8,7 @@ int main() int i; s = __CPROVER_string_concat(s2, s3); + __CPROVER_assume(i < 10); __CPROVER_assume(__CPROVER_string_length(s2) == i); __CPROVER_assume( __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 36fc68a598a..e3f91fbd4be 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -20,6 +20,10 @@ Author: Alberto Griggio, alberto.griggio@gmail.com unsignedbv_typet char_type(CHAR_WIDTH); unsignedbv_typet index_type(INDEX_WIDTH); +constant_exprt index_zero(integer2binary(0, INDEX_WIDTH), index_type); +constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); +constant_exprt index_max(integer2binary(1<<30, INDEX_WIDTH), index_type); + // Succinct version of pretty() std::string pretty_short(exprt expr) { @@ -140,10 +144,14 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) move_to_operands(length,content); } - +/* string_exprt::string_exprt(const symbol_exprt & sym) : string_exprt() { symbol_to_string[sym.get_identifier()] = *this; +}*/ + +string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ + return symbol_to_string[expr.get_identifier()]; } string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & axioms) @@ -151,10 +159,13 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & if(unrefined_string.id()==ID_function_application) { string_exprt s; s.of_function_application(to_function_application_expr(unrefined_string), axioms); + binary_relation_exprt lem1(s.length(), ID_le,index_max); + axioms.push_back(string_axiomt(lem1)); return s; } else if(unrefined_string.id()==ID_symbol) { - return symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; + return find_symbol(to_symbol_expr(unrefined_string)); + //return symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; //return of_symbol(to_symbol_expr(unrefined_string)); } else { @@ -163,11 +174,12 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & } } +/* void string_exprt::of_symbol(const symbol_exprt & expr, axiom_vect & axioms) { string_exprt s = symbol_to_string[expr.get_identifier()]; axioms.push_back(string_axiomt(equal_exprt(s.content(),content()))); axioms.push_back(string_axiomt(equal_exprt(s.length(),length()))); -} + }*/ void string_exprt::of_function_application(const function_application_exprt & expr, axiom_vect & axioms) { @@ -218,7 +230,6 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ axioms.push_back(string_axiomt(equal_exprt(length(),s_length))); } -constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); void string_exprt::of_string_concat(const function_application_exprt &f, axiom_vect & axioms) { @@ -231,10 +242,10 @@ void string_exprt::of_string_concat(const function_application_exprt &f, axiom_v equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.push_back(string_axiomt(length_sum_lem)); // We can run into problems if the length of the string exceed 32 bits? - /*binary_relation_exprt lem1(length(), ID_ge, s1.length()); + binary_relation_exprt lem1(length(), ID_ge, s1.length()); axioms.push_back(string_axiomt(lem1)); binary_relation_exprt lem2(length(), ID_ge, s2.length()); - axioms.push_back(string_axiomt(lem2));*/ + axioms.push_back(string_axiomt(lem2)); symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); @@ -369,7 +380,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if (is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality - string_exprt str = string_exprt(to_symbol_expr(expr)); + string_exprt str = string_exprt::find_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; } else if (is_unrefined_char_type(expr.type())) { @@ -470,7 +481,7 @@ void string_refinementt::add_lemmas(axiom_vect & lemmas) void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { if(str.id()==ID_symbol) { - symbol_to_string[sym.get_identifier()] = symbol_to_string[to_symbol_expr(str).get_identifier()]; + symbol_to_string[sym.get_identifier()] = string_exprt::find_symbol(to_symbol_expr(str)); } else { axiom_vect lemmas; @@ -481,10 +492,17 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str string_exprt string_refinementt::make_string(const exprt & str) { - axiom_vect lemmas; - string_exprt s = string_exprt::of_expr(str,lemmas); - add_lemmas(lemmas); - return s; + if(str.id()==ID_symbol) { + string_exprt s = string_exprt::find_symbol(to_symbol_expr(str)); + //symbol_to_string[sym.get_identifier()] = s; + return s; + } + else { + axiom_vect lemmas; + string_exprt s = string_exprt::of_expr(str,lemmas); + add_lemmas(lemmas); + return s; + } } bvt string_refinementt::convert_string_equal( @@ -647,6 +665,9 @@ bvt string_refinementt::convert_string_char_at( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments string_exprt str = make_string(args[0]); + debug() << "in convert_string_char_at: we need to add something to" + << " the list of lemmas" << eom; + index_set[str.content()].insert(args[1]); return convert_bv(str[args[1]]); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index cb39592de5c..9704c369408 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -57,18 +57,18 @@ typedef std::vector axiom_vect; class string_exprt : public struct_exprt { - - public: string_exprt(); //string_exprt(exprt length, exprt content); - string_exprt(const symbol_exprt & sym); + // string_exprt(const symbol_exprt & sym); //string_exprt(symbol_exprt sym, exprt unrefined_string); // returns a list of lemmas which should hold static string_exprt of_expr(const exprt & unrefined_string, axiom_vect & axioms); + static string_exprt find_symbol(const symbol_exprt &expr); + void of_function_application(const function_application_exprt &expr, axiom_vect & axioms); - void of_symbol(const symbol_exprt &expr,axiom_vect &axioms); + //void of_symbol(const symbol_exprt &expr,axiom_vect &axioms); void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); From 888e37462b87e122b7f87a67a2c6a137e7e6b870 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 12:03:47 +0100 Subject: [PATCH 045/221] Corrected the order in the arguments of issuffix --- regression/strings/test3.2/test.c | 2 +- regression/strings/test3/test.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c index 3036a0deebf..66220aafb61 100644 --- a/regression/strings/test3.2/test.c +++ b/regression/strings/test3.2/test.c @@ -7,7 +7,7 @@ int main() __CPROVER_string s, s2, s3; int i; - __CPROVER_assume(i < 10); + //__CPROVER_assume(i < 10); s = __CPROVER_string_concat(s2, s3); __CPROVER_assume(__CPROVER_string_length(s2) == i); diff --git a/regression/strings/test3/test.c b/regression/strings/test3/test.c index 9e027cba21b..f427c7d2651 100644 --- a/regression/strings/test3/test.c +++ b/regression/strings/test3/test.c @@ -13,7 +13,7 @@ int main() __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); assert(__CPROVER_string_length(s) == i + 5); - assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); + assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); return 0; From 1c89da7aeaccdde0b6173ddce027ce81b585aa6a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 12:27:48 +0100 Subject: [PATCH 046/221] A couple of other examples for strings --- regression/strings/test5/test.c | 3 +++ regression/strings/test_concat/test.c | 22 ++++++++++++++++++++++ regression/strings/test_concat/test.desc | 7 +++++++ regression/strings/test_equal/test.c | 13 +++++++++++++ regression/strings/test_equal/test.desc | 7 +++++++ regression/strings/test_suffix/test.c | 14 ++++++++++++++ regression/strings/test_suffix/test.desc | 7 +++++++ 7 files changed, 73 insertions(+) create mode 100644 regression/strings/test_concat/test.c create mode 100644 regression/strings/test_concat/test.desc create mode 100644 regression/strings/test_equal/test.c create mode 100644 regression/strings/test_equal/test.desc create mode 100644 regression/strings/test_suffix/test.c create mode 100644 regression/strings/test_suffix/test.desc diff --git a/regression/strings/test5/test.c b/regression/strings/test5/test.c index 038bbfeefda..e07226f5238 100644 --- a/regression/strings/test5/test.c +++ b/regression/strings/test5/test.c @@ -5,6 +5,9 @@ void main() { __CPROVER_string x, y, z, w; + + __CPROVER_assume(__CPROVER_string_length(z) < 10); + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && __CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c"))) && __CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("c"), y), __CPROVER_string_concat(__CPROVER_string_literal("c"), __CPROVER_string_concat(__CPROVER_string_literal("b"), __CPROVER_string_literal("c"))))) { diff --git a/regression/strings/test_concat/test.c b/regression/strings/test_concat/test.c new file mode 100644 index 00000000000..23c74d451e3 --- /dev/null +++ b/regression/strings/test_concat/test.c @@ -0,0 +1,22 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s,t,u; + //s = __CPROVER_string_literal("pi"); + //t = __CPROVER_string_literal("ppo"); + unsigned i = __CPROVER_string_length(s); + //t = __CPROVER_string_literal("ppo"); + __CPROVER_assume(i < 10); + __CPROVER_assume(__CPROVER_string_equal(t, __CPROVER_string_literal("ppo"))); + u = __CPROVER_string_concat(s, t); + //assert(__CPROVER_char_at(u, 4) == __CPROVER_char_literal("o")); + //assert(__CPROVER_string_equal(u, __CPROVER_string_literal("pippo"))); + + __CPROVER_char c = __CPROVER_char_at(u,i); + + assert(c == __CPROVER_char_literal("p")); + return 0; +} diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc new file mode 100644 index 00000000000..0f5bd6ccca7 --- /dev/null +++ b/regression/strings/test_concat/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--pass +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test_equal/test.c b/regression/strings/test_equal/test.c new file mode 100644 index 00000000000..d7c9a5f9f70 --- /dev/null +++ b/regression/strings/test_equal/test.c @@ -0,0 +1,13 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + s = __CPROVER_string_literal("pippo"); + assert(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); + + + return 0; +} diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc new file mode 100644 index 00000000000..0f5bd6ccca7 --- /dev/null +++ b/regression/strings/test_equal/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--pass +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- diff --git a/regression/strings/test_suffix/test.c b/regression/strings/test_suffix/test.c new file mode 100644 index 00000000000..1729eff7833 --- /dev/null +++ b/regression/strings/test_suffix/test.c @@ -0,0 +1,14 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + + __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); + + assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); + + return 0; +} diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc new file mode 100644 index 00000000000..0f5bd6ccca7 --- /dev/null +++ b/regression/strings/test_suffix/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--pass +^EXIT=0$ +^SIGNAL=0$ +^VERIFICATION SUCCESSFUL$ +-- From b90ec2c45eefe8e1045d94c7a2af1604c5dbff95 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 13:41:50 +0100 Subject: [PATCH 047/221] Test descriptions for strings --- regression/strings/Makefile | 3 +++ regression/strings/test1/test.desc | 2 +- regression/strings/test3.1/test.desc | 2 +- regression/strings/test3.2/test.desc | 2 +- regression/strings/test3.3/test.desc | 2 +- regression/strings/test3.4/test.desc | 4 ++-- regression/strings/test3/test.desc | 2 +- regression/strings/test5/test.desc | 4 ++-- regression/strings/test_strlen/test.c | 4 ++-- 9 files changed, 14 insertions(+), 11 deletions(-) create mode 100644 regression/strings/Makefile diff --git a/regression/strings/Makefile b/regression/strings/Makefile new file mode 100644 index 00000000000..545b36925ac --- /dev/null +++ b/regression/strings/Makefile @@ -0,0 +1,3 @@ + +test: + ../test.pl -c ../../../src/cbmc/cbmc diff --git a/regression/strings/test1/test.desc b/regression/strings/test1/test.desc index 6373a3a0bcf..6a0f2afbeb5 100644 --- a/regression/strings/test1/test.desc +++ b/regression/strings/test1/test.desc @@ -1,6 +1,6 @@ CORE test.c ---z3 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.1/test.desc b/regression/strings/test3.1/test.desc index 4dfa75d77d5..0f5bd6ccca7 100644 --- a/regression/strings/test3.1/test.desc +++ b/regression/strings/test3.1/test.desc @@ -1,6 +1,6 @@ CORE test.c ---cvc4 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.2/test.desc b/regression/strings/test3.2/test.desc index 4dfa75d77d5..0f5bd6ccca7 100644 --- a/regression/strings/test3.2/test.desc +++ b/regression/strings/test3.2/test.desc @@ -1,6 +1,6 @@ CORE test.c ---cvc4 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.3/test.desc b/regression/strings/test3.3/test.desc index 4dfa75d77d5..0f5bd6ccca7 100644 --- a/regression/strings/test3.3/test.desc +++ b/regression/strings/test3.3/test.desc @@ -1,6 +1,6 @@ CORE test.c ---cvc4 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.4/test.desc b/regression/strings/test3.4/test.desc index 7b9eff42312..dbf3c40cfdb 100644 --- a/regression/strings/test3.4/test.desc +++ b/regression/strings/test3.4/test.desc @@ -1,7 +1,7 @@ CORE test.c ---cvc4 -^EXIT=0$ +--pass +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 6373a3a0bcf..0f5bd6ccca7 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -1,6 +1,6 @@ CORE test.c ---z3 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test5/test.desc b/regression/strings/test5/test.desc index 7b9eff42312..dbf3c40cfdb 100644 --- a/regression/strings/test5/test.desc +++ b/regression/strings/test5/test.desc @@ -1,7 +1,7 @@ CORE test.c ---cvc4 -^EXIT=0$ +--pass +^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ -- diff --git a/regression/strings/test_strlen/test.c b/regression/strings/test_strlen/test.c index 89d826af6fb..fbbe9abc291 100644 --- a/regression/strings/test_strlen/test.c +++ b/regression/strings/test_strlen/test.c @@ -1,5 +1,5 @@ #include -#include "cprover-string-hack.h" +#include "../cprover-string-hack.h" int main() @@ -10,7 +10,7 @@ int main() t = __CPROVER_string_literal("xyz"); len_s = __CPROVER_string_length(s); len_t = __CPROVER_string_length(t); - int b = ( len_s == len_t ); + unsigned b = ( len_s == len_t ); assert(b); return 0; } From f1a4908b6d04313e0a31afcc23d69c7aa3c3d2a2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 14:56:06 +0100 Subject: [PATCH 048/221] Better displaying of the lemmas and other expressions --- regression/strings/test3.2/test.c | 4 +- src/solvers/refinement/string_refinement.cpp | 87 +++++++++++++------- src/solvers/refinement/string_refinement.h | 3 + 3 files changed, 61 insertions(+), 33 deletions(-) diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c index 66220aafb61..efb58997ae5 100644 --- a/regression/strings/test3.2/test.c +++ b/regression/strings/test3.2/test.c @@ -8,10 +8,10 @@ int main() int i; //__CPROVER_assume(i < 10); - + //__CPROVER_assume(__CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); + s3 = __CPROVER_string_literal("pippo"); s = __CPROVER_string_concat(s2, s3); __CPROVER_assume(__CPROVER_string_length(s2) == i); - __CPROVER_assume(__CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); // proving the assertions individually seems to be much faster //assert(__CPROVER_string_length(s) == i + 5); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index e3f91fbd4be..743021a6b83 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -14,7 +14,11 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -#include + +// This is mostly for debugging: +#include +#include +//#include // Types used in this refinement unsignedbv_typet char_type(CHAR_WIDTH); @@ -26,8 +30,8 @@ constant_exprt index_max(integer2binary(1<<30, INDEX_WIDTH), index_type); // Succinct version of pretty() -std::string pretty_short(exprt expr) { - std::ostringstream buf; +std::string string_refinementt::pretty_short(exprt expr) { + /* std::ostringstream buf; if(expr.get(ID_identifier) != "") { buf << expr.get(ID_identifier); } else if (expr.operands().size() > 0) { @@ -36,7 +40,12 @@ std::string pretty_short(exprt expr) { } else if(expr.get(ID_value) != "") { buf << expr.get(ID_value); } else buf << expr.pretty(); - return buf.str(); + return buf.str();*/ + + languagest languages(ns, new_ansi_c_language()); + std::string string_value; + languages.from_expr(expr, string_value); + return string_value; } // associate a string to symbols @@ -159,8 +168,8 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & if(unrefined_string.id()==ID_function_application) { string_exprt s; s.of_function_application(to_function_application_expr(unrefined_string), axioms); - binary_relation_exprt lem1(s.length(), ID_le,index_max); - axioms.push_back(string_axiomt(lem1)); + //binary_relation_exprt lem1(s.length(), ID_le,index_max); + //axioms.push_back(string_axiomt(lem1)); return s; } else if(unrefined_string.id()==ID_symbol) { @@ -169,8 +178,9 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & //return of_symbol(to_symbol_expr(unrefined_string)); } else { - std:: cout << "of_expr( " << unrefined_string.pretty() << std::endl; - throw "string_exprt of something else than function application not implemented"; + //std:: cout << "of_expr( " << unrefined_string.pretty() << std::endl; + throw ("string_exprt of " + unrefined_string.pretty() + + "which is not a symbol or a function application"); } } @@ -186,8 +196,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex const exprt &name = expr.function(); if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - std::cout << "string_exprt::of_function_application(" - << id << ")" << std::endl; + //std::cout << "string_exprt::of_function_application(" + //<< id << ")" << std::endl; if (id == "__CPROVER_uninterpreted_string_literal") { return of_string_literal(expr,axioms); } else if (id == "__CPROVER_uninterpreted_strcat") { @@ -300,8 +310,7 @@ void string_exprt::of_string_char_set string_exprt str = of_expr(args[0],axioms); symbol_exprt c = string_refinementt::fresh_symbol("char", char_type); - std::cout << "of_string_char_set : this has to be checked" << std::endl; - + //THIS HAS NOT BEEN CHECKED: axioms.push_back(equal_exprt(c,args[2])); with_exprt sarrnew(str.content(), args[1], c); implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), @@ -320,10 +329,10 @@ void string_exprt::of_string_char_set /////////////////////// -// Nothing particular is done there for now +// We add instantiations before launching the solver void string_refinementt::post_process() { - debug() << "string_refinementt::post_process()" << eom; + //debug() << "string_refinementt::post_process()" << eom; add_instantiations(true); SUB::post_process(); @@ -378,7 +387,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) throw "string_refinementt::convert_symbol got empty identifier"; if (is_unrefined_string_type(type)) { - debug() << "string_refinementt::convert_symbol of unrefined string" << eom; + //debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality string_exprt str = string_exprt::find_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); @@ -406,8 +415,8 @@ bvt string_refinementt::convert_function_application( if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinementt::convert_function_application(" - << id << ")" << eom; + //debug() << "string_refinementt::convert_function_application(" + // << id << ")" << eom; if (id == string_literal_func || id == string_concat_func || id == string_substring_func @@ -457,7 +466,9 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { - debug() << "adding lemma " << lemma.pretty() << eom; + debug() << "adding lemma " << pretty_short(lemma) << eom; + //lemma.pretty() << eom; + prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); } @@ -665,8 +676,8 @@ bvt string_refinementt::convert_string_char_at( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments string_exprt str = make_string(args[0]); - debug() << "in convert_string_char_at: we need to add something to" - << " the list of lemmas" << eom; + debug() << "in convert_string_char_at: we add the index to the" + << " index set" << eom; index_set[str.content()].insert(args[1]); return convert_bv(str[args[1]]); } @@ -681,7 +692,7 @@ bvt string_refinementt::convert_string_char_at( // with the found indexes, and add them as lemmas. void string_refinementt::add_instantiations(bool first) { - debug() << "string_refinementt::add_instantiations" << eom; + //debug() << "string_refinementt::add_instantiations" << eom; if (first) { for (size_t i = 0; i < string_axioms.size(); ++i) { update_index_set(string_axioms[i]); @@ -693,16 +704,22 @@ void string_refinementt::add_instantiations(bool first) cur.clear(); - debug() << "going through the index set:" << eom; + debug() << "string_refinementt::add_instantiations: " + << "going through the index set:" << eom; for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { const exprt &s = i->first; - debug() << pretty_short(s) << " ---- " << eom; + debug() << "IS(" << pretty_short(s) << ") == {"; + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) + debug() << pretty_short (*j) << "; "; + debug() << "}" << eom; + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) { const exprt &val = *j; - debug() << "val " << val << " : " << eom; for (size_t k = 0; k < string_axioms.size(); ++k) { exprt lemma = instantiate(string_axioms[k], s, val); @@ -712,7 +729,6 @@ void string_refinementt::add_instantiations(bool first) } } - debug() << eom; } } @@ -724,7 +740,7 @@ unsigned integer_of_expr(const constant_exprt & expr) { std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) { unsigned n = integer_of_expr(to_constant_expr(size)); - if(n>500) return "array-too-big"; + if(n>500) return "very long string"; if(n==0) return "\"\""; unsigned str[n]; exprt val = get(arr); @@ -742,11 +758,16 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s } std::ostringstream buf; + buf << "\""; for(unsigned i = 0; i < n; i++) { char c = (char) str[i]; - buf << c << ":"; + if(31first << " = " << it->second << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; + debug() << "check_axioms: " << it->first << " = " << pretty_short(it->second) << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = boolean_symbols.begin(); it != boolean_symbols.end(); it++) { - debug() << "check_axioms boolean_symbol: " << it->get_identifier() << " := " << get(*it) << eom; + debug() << "check_axioms boolean_symbol: " << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } @@ -937,7 +958,8 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con found = true; neg = (it->second == 1); } else - std::cout << "in compute_subst: warning: occurences of qvar canceled out " << std::endl; + debug() << "in string_refinementt::compute_subst:" + << " warning: occurences of qvar canceled out " << eom; } else { if (it->second == 0) { } else if (it->second == -1) { @@ -1079,7 +1101,10 @@ exprt string_refinementt::instantiate(const string_axiomt &axiom, exprt body(axiom.body); implies_exprt instance(premise, body); - debug() << "string_refinementt::instantiate : replaces occurances of" << axiom.qvar << " by " << r << " in " << instance << eom; + /*debug() << "string_refinementt::instantiate : replaces " << eom + << "occurances of" << pretty_short(axiom.qvar) << eom + << "by " << pretty_short(r) << eom << + << "in " << pretty_short(instance) << eom;*/ replace_expr(axiom.qvar, r, instance); return instance; } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 9704c369408..595905d8622 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -230,6 +230,9 @@ class string_refinementt: public bv_refinementt // current set of lemmas (unquantified) std::vector cur; + // succinct and pretty way to display an expression + std::string pretty_short(exprt expr); + }; #endif From 759613c2e345a9ee2542bb40a4b1ef6b58ef9c1b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 15 Aug 2016 16:35:35 +0100 Subject: [PATCH 049/221] Cleaning a bit the code for string refinement --- regression/strings/test5/test.c | 10 ++- src/solvers/refinement/string_refinement.cpp | 41 +---------- src/solvers/refinement/string_refinement.h | 77 +++++++++++--------- 3 files changed, 52 insertions(+), 76 deletions(-) diff --git a/regression/strings/test5/test.c b/regression/strings/test5/test.c index e07226f5238..88acdda065e 100644 --- a/regression/strings/test5/test.c +++ b/regression/strings/test5/test.c @@ -6,11 +6,17 @@ void main() { __CPROVER_string x, y, z, w; + z = __CPROVER_string_concat(x, y); __CPROVER_assume(__CPROVER_string_length(z) < 10); - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && + __CPROVER_assume(__CPROVER_char_at(z,1) == __CPROVER_char_literal("p")); + // __CPROVER_string_concat(w, __CPROVER_string_literal("c")))); + //__CPROVER_assume(__CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c")))); + + assert(! __CPROVER_string_equal(y, __CPROVER_string_literal("cbc"))); + /*if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && __CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c"))) && __CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("c"), y), __CPROVER_string_concat(__CPROVER_string_literal("c"), __CPROVER_string_concat(__CPROVER_string_literal("b"), __CPROVER_string_literal("c"))))) { assert(0); - } + }*/ } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 743021a6b83..c4ef0f692e6 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -30,18 +30,7 @@ constant_exprt index_max(integer2binary(1<<30, INDEX_WIDTH), index_type); // Succinct version of pretty() -std::string string_refinementt::pretty_short(exprt expr) { - /* std::ostringstream buf; - if(expr.get(ID_identifier) != "") { - buf << expr.get(ID_identifier); - } else if (expr.operands().size() > 0) { - for (int i =0; i " << body.pretty(); - return buf.str(); -} string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) @@ -135,16 +117,6 @@ symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -/* -string_exprt::string_exprt(exprt length, exprt content) : struct_exprt(string_ref_typet()) -{ - string_ref_typet t; - assert(length.type() == index_type); - assert(content.type() == t.get_content_type()); - move_to_operands(length,content); -} -*/ - string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; @@ -153,12 +125,6 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) move_to_operands(length,content); } -/* -string_exprt::string_exprt(const symbol_exprt & sym) : string_exprt() -{ - symbol_to_string[sym.get_identifier()] = *this; -}*/ - string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ return symbol_to_string[expr.get_identifier()]; } @@ -168,17 +134,12 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & if(unrefined_string.id()==ID_function_application) { string_exprt s; s.of_function_application(to_function_application_expr(unrefined_string), axioms); - //binary_relation_exprt lem1(s.length(), ID_le,index_max); - //axioms.push_back(string_axiomt(lem1)); return s; } else if(unrefined_string.id()==ID_symbol) { return find_symbol(to_symbol_expr(unrefined_string)); - //return symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; - //return of_symbol(to_symbol_expr(unrefined_string)); } else { - //std:: cout << "of_expr( " << unrefined_string.pretty() << std::endl; throw ("string_exprt of " + unrefined_string.pretty() + "which is not a symbol or a function application"); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 595905d8622..ea990d48efc 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -33,54 +33,45 @@ class string_ref_typet : public struct_typet { class string_axiomt { public: - //unsigned id_nr; - //exprt lit; - //quantified symbol + // Universally quantified symbol symbol_exprt qvar; exprt premise; exprt body; - - //std::string as_string() const; - //explicit string_axiomt(unsigned i=0): id_nr(i) {} + // Axiom of the form: forall index. prem ==> bod string_axiomt(symbol_exprt index, exprt prem, exprt bod); - // axiom with no premise + // Axiom with no quantification string_axiomt(exprt bod); inline bool is_quantified() {return (premise != true_exprt());} - - std::string to_string() const; }; typedef std::vector axiom_vect; - +// Expressions that encode strings class string_exprt : public struct_exprt { public: string_exprt(); - //string_exprt(exprt length, exprt content); - // string_exprt(const symbol_exprt & sym); - //string_exprt(symbol_exprt sym, exprt unrefined_string); - // returns a list of lemmas which should hold + // Add to the list of axioms, lemmas which should hold for the string to be + // equal to the given expression. static string_exprt of_expr(const exprt & unrefined_string, axiom_vect & axioms); + + // Find the string corresponding to the given symbol if it exists. + // Otherwise a new string is created. static string_exprt find_symbol(const symbol_exprt &expr); - void of_function_application(const function_application_exprt &expr, axiom_vect & axioms); - //void of_symbol(const symbol_exprt &expr,axiom_vect &axioms); - void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); - void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); - void of_string_char_set(const function_application_exprt &expr,axiom_vect &axioms); - + // Expression corresponding to the length of the string inline const exprt & length() const { return op0();}; + // Expression corresponding to the content (array of characters) of the string inline const exprt & content() const { return op1();}; + // Expression of the character at position idx in the string inline index_exprt operator[] (exprt idx) - { //typecast_exprt pos(idx, index_type); - return index_exprt(content(), idx);} + { return index_exprt(content(), idx);} + // Comparison on the length of the strings inline binary_relation_exprt operator< (string_exprt rhs) { return binary_relation_exprt(length(), ID_lt, rhs.length()); } inline binary_relation_exprt operator> (string_exprt rhs) @@ -94,13 +85,21 @@ class string_exprt : public struct_exprt { inline binary_relation_exprt operator> (const symbol_exprt & rhs) { return binary_relation_exprt(rhs, ID_lt, length()); } +private: + // Auxiliary functions for of_expr + void of_function_application(const function_application_exprt &expr, axiom_vect & axioms); + + void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); + void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); + void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); + void of_string_char_set(const function_application_exprt &expr,axiom_vect &axioms); + friend inline string_exprt &to_string_expr(exprt &expr) { assert(expr.id()==ID_struct); return static_cast(expr); } - //static string_exprt & by_content (const exprt & content); }; string_exprt &to_string_expr(exprt expr); @@ -114,11 +113,6 @@ class string_refinementt: public bv_refinementt virtual std::string decision_procedure_text() const { return "string refinement loop with "+prop.solver_text(); } - - typedef bv_refinementt SUB; - - inline size_t get_string_width() - { return boolbv_width(string_type);} static bool is_unrefined_string_type(const typet &type); static bool is_unrefined_char_type(const typet &type); @@ -127,6 +121,13 @@ class string_refinementt: public bv_refinementt static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); + + inline std::string axiom_to_string(const string_axiomt & ax) { + return ("forall " + pretty_short(ax.qvar) + ". (" + + pretty_short(ax.premise) + ") ==> " + pretty_short(ax.body)); + } + + irep_idt string_literal_func; irep_idt char_literal_func; irep_idt string_length_func; @@ -139,8 +140,14 @@ class string_refinementt: public bv_refinementt irep_idt string_is_suffix_func; irep_idt string_char_set_func; -private: +private: + typedef bv_refinementt SUB; + string_ref_typet string_type; + + inline size_t get_string_width() + { return boolbv_width(string_type);} + static unsigned next_symbol_id; protected: @@ -168,6 +175,7 @@ class string_refinementt: public bv_refinementt bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); +private: // Boolean symbols that are used to know whether the results // of some functions should be true. std::vector boolean_symbols; @@ -200,8 +208,8 @@ class string_refinementt: public bv_refinementt void update_index_set(const exprt &formula); void update_index_set(const string_axiomt &axiom); - //takes an universaly quantified formula [axiom], a array of char variable [s], - // and an index expression [val]. + // Takes an universaly quantified formula [axiom], + // an array of char variable [s], and an index expression [val]. // Computes one index [v1] in which [axiom.idx] appears, takes the // corresponding substitition [r] (obtained with [compute_subst]). // Then substitutes [axiom.idx] with [r] in [axiom]. @@ -222,16 +230,17 @@ class string_refinementt: public bv_refinementt // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); + // Convert the content of a string to a more readable representation std::string string_of_array(const exprt &arr, const exprt &size); - expr_sett strings; + // Lemmas that were already added expr_sett seen_instances; // current set of lemmas (unquantified) std::vector cur; // succinct and pretty way to display an expression - std::string pretty_short(exprt expr); + std::string pretty_short(const exprt & expr); }; From 3f21d2805eabd1ba740396fb88902acc691702a2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 16 Aug 2016 09:57:17 +0100 Subject: [PATCH 050/221] Tests coming from the PASS article --- regression/strings/test5/test.c | 12 ++---------- regression/strings/test_pass1/test.c | 14 ++++++++++++++ regression/strings/test_pass1/test.desc | 9 +++++++++ regression/strings/test_pass_pc3/test.c | 15 +++++++++++++++ regression/strings/test_pass_pc3/test.desc | 7 +++++++ src/solvers/flattening/boolbv_get.cpp | 1 - src/solvers/refinement/string_refinement.cpp | 17 +++++------------ 7 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 regression/strings/test_pass1/test.c create mode 100644 regression/strings/test_pass1/test.desc create mode 100644 regression/strings/test_pass_pc3/test.c create mode 100644 regression/strings/test_pass_pc3/test.desc diff --git a/regression/strings/test5/test.c b/regression/strings/test5/test.c index 88acdda065e..812a20f3442 100644 --- a/regression/strings/test5/test.c +++ b/regression/strings/test5/test.c @@ -6,17 +6,9 @@ void main() { __CPROVER_string x, y, z, w; - z = __CPROVER_string_concat(x, y); - __CPROVER_assume(__CPROVER_string_length(z) < 10); - - __CPROVER_assume(__CPROVER_char_at(z,1) == __CPROVER_char_literal("p")); - // __CPROVER_string_concat(w, __CPROVER_string_literal("c")))); - //__CPROVER_assume(__CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c")))); - - assert(! __CPROVER_string_equal(y, __CPROVER_string_literal("cbc"))); - /*if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && + if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, y)) && __CPROVER_string_equal(z, __CPROVER_string_concat(w, __CPROVER_string_literal("c"))) && __CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("c"), y), __CPROVER_string_concat(__CPROVER_string_literal("c"), __CPROVER_string_concat(__CPROVER_string_literal("b"), __CPROVER_string_literal("c"))))) { assert(0); - }*/ + } } diff --git a/regression/strings/test_pass1/test.c b/regression/strings/test_pass1/test.c new file mode 100644 index 00000000000..c2e4c12f6b7 --- /dev/null +++ b/regression/strings/test_pass1/test.c @@ -0,0 +1,14 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string t; + __CPROVER_string s = __CPROVER_string_concat(t, t); + __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("aa"))); + + assert(t == __CPROVER_string_literal("a")); + assert(t != __CPROVER_string_literal("a")); + return 0; +} diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc new file mode 100644 index 00000000000..90acd552413 --- /dev/null +++ b/regression/strings/test_pass1/test.desc @@ -0,0 +1,9 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion\.1\] assertion t == __CPROVER_uninterpreted_string_literal(\"a\"): SUCCESS$ +^\[main.assertion\.2\] assertion t != __CPROVER_uninterpreted_string_literal(\"a\"): FAILURE$ +^\*\* 1 of 2 failed (2 iterations)$ + diff --git a/regression/strings/test_pass_pc3/test.c b/regression/strings/test_pass_pc3/test.c new file mode 100644 index 00000000000..1d761566bcf --- /dev/null +++ b/regression/strings/test_pass_pc3/test.c @@ -0,0 +1,15 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s1,s2,s3; + __CPROVER_string t = __CPROVER_string_concat(s1,__CPROVER_string_concat(s2, s3)); + __CPROVER_assume(__CPROVER_string_equal(t, __CPROVER_string_literal("aaaa"))); + __CPROVER_assume(__CPROVER_string_length(s1) >= __CPROVER_string_length(s2)); + __CPROVER_assume(__CPROVER_string_length(s2) >= __CPROVER_string_length(s3)); + + assert(__CPROVER_string_length(s3) == 0); + return 0; +} diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc new file mode 100644 index 00000000000..078129d3a38 --- /dev/null +++ b/regression/strings/test_pass_pc3/test.desc @@ -0,0 +1,7 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^VERIFICATION FAILED$ + diff --git a/src/solvers/flattening/boolbv_get.cpp b/src/solvers/flattening/boolbv_get.cpp index 3ea95267348..7daab9ec2bb 100644 --- a/src/solvers/flattening/boolbv_get.cpp +++ b/src/solvers/flattening/boolbv_get.cpp @@ -390,7 +390,6 @@ exprt boolbvt::bv_get_unbounded_array(const exprt &expr) const return nil_exprt(); // get root - std::cout << "boolbv_get.cpp get root: " << number << std::endl; number=arrays.find_number(number); assert(numberfirst << " = " << pretty_short(it->second) << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; + debug() << it->first << " = " << pretty_short(it->second) << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = boolean_symbols.begin(); it != boolean_symbols.end(); it++) { - debug() << "check_axioms boolean_symbol: " << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } @@ -806,12 +799,12 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { - debug() << "satisfiable" << eom; + //debug() << "satisfiable" << eom; exprt val = solver.get(axiom.qvar); violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: - debug() << "unsatisfiable" << eom; + //debug() << "unsatisfiable" << eom; break; default: throw "failure in checking axiom"; From 36015e3e90c2018e5d5ba7c6c809999ec5e858b4 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 17 Aug 2016 11:29:01 +0100 Subject: [PATCH 051/221] adding support for axioms with existential quantifier, and adding the function contains --- regression/strings/cprover-string-hack.h | 3 + regression/strings/test3.2/test.c | 2 +- regression/strings/test3/test.c | 2 +- regression/strings/test_pass1/test.c | 8 +- regression/strings/test_pass1/test.desc | 4 +- regression/strings/test_pass_pc3/test.c | 1 + regression/strings/test_pass_pc3/test.desc | 2 + regression/strings/test_suffix/test.c | 2 +- src/solvers/refinement/string_refinement.cpp | 271 +++++++++++++++---- src/solvers/refinement/string_refinement.h | 42 ++- 10 files changed, 264 insertions(+), 73 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index ece71c21ecc..ff81ff44b59 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -35,6 +35,8 @@ typedef struct __CPROVER_char { char c; } __CPROVER_char; /* test whether p is a suffix of s */ #define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_strsuffixof(p, s) +/* test whether p contains s */ +#define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_strcontains(p, s) /* returns a new string obtained from s by setting s[p] = c */ #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) @@ -52,5 +54,6 @@ extern unsigned __CPROVER_uninterpreted_strlen(__CPROVER_string str); extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, unsigned i, unsigned j); extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_strcontains(__CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, unsigned pos, __CPROVER_char c); diff --git a/regression/strings/test3.2/test.c b/regression/strings/test3.2/test.c index efb58997ae5..86d93224878 100644 --- a/regression/strings/test3.2/test.c +++ b/regression/strings/test3.2/test.c @@ -15,7 +15,7 @@ int main() // proving the assertions individually seems to be much faster //assert(__CPROVER_string_length(s) == i + 5); - assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); //assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); return 0; diff --git a/regression/strings/test3/test.c b/regression/strings/test3/test.c index f427c7d2651..54dcf90f3e1 100644 --- a/regression/strings/test3/test.c +++ b/regression/strings/test3/test.c @@ -13,7 +13,7 @@ int main() __CPROVER_string_equal(s3, __CPROVER_string_literal("pippo"))); assert(__CPROVER_string_length(s) == i + 5); - assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); return 0; diff --git a/regression/strings/test_pass1/test.c b/regression/strings/test_pass1/test.c index c2e4c12f6b7..0ec758c9f64 100644 --- a/regression/strings/test_pass1/test.c +++ b/regression/strings/test_pass1/test.c @@ -8,7 +8,11 @@ int main() __CPROVER_string s = __CPROVER_string_concat(t, t); __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("aa"))); - assert(t == __CPROVER_string_literal("a")); - assert(t != __CPROVER_string_literal("a")); + assert(__CPROVER_string_equal(t,__CPROVER_string_literal("a"))); + assert(!__CPROVER_string_equal(t,__CPROVER_string_literal("a"))); + // Warning the following does not express the same thing, because + // equality can fail while the two sides represent the same thing: + //assert(t == __CPROVER_string_literal("a")); + //assert(t != __CPROVER_string_literal("a")); return 0; } diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 90acd552413..3aaf19479ea 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion\.1\] assertion t == __CPROVER_uninterpreted_string_literal(\"a\"): SUCCESS$ -^\[main.assertion\.2\] assertion t != __CPROVER_uninterpreted_string_literal(\"a\"): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"a\")): SUCCESS +^\[main.assertion.2\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"a\")): FAILURE$ ^\*\* 1 of 2 failed (2 iterations)$ diff --git a/regression/strings/test_pass_pc3/test.c b/regression/strings/test_pass_pc3/test.c index 1d761566bcf..e70b34b898d 100644 --- a/regression/strings/test_pass_pc3/test.c +++ b/regression/strings/test_pass_pc3/test.c @@ -11,5 +11,6 @@ int main() __CPROVER_assume(__CPROVER_string_length(s2) >= __CPROVER_string_length(s3)); assert(__CPROVER_string_length(s3) == 0); + assert(__CPROVER_string_length(s3) < 2); return 0; } diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index 078129d3a38..db18aef13b1 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -3,5 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strlen(s3) == 0: FAILURE$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strlen(s3) < 2: SUCCESS$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test_suffix/test.c b/regression/strings/test_suffix/test.c index 1729eff7833..7179319499f 100644 --- a/regression/strings/test_suffix/test.c +++ b/regression/strings/test_suffix/test.c @@ -8,7 +8,7 @@ int main() __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); - assert(__CPROVER_string_issuffix(s,__CPROVER_string_literal("po"))); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); return 0; } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 035aab81546..f2bbc699607 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -53,19 +53,38 @@ string_ref_typet::string_ref_typet() : struct_typet() { components()[1].type()=char_array; } -string_axiomt::string_axiomt(symbol_exprt index, exprt prem, exprt bod) +string_axiomt::string_axiomt(symbol_exprt qvar, exprt prem, exprt bod) : + univ_var(qvar), premise(prem), body(bod), is_quantified(true) +{} + +string_axiomt::string_axiomt(symbol_exprt univ, symbol_exprt evar, exprt bound, exprt prem, exprt bod) : string_axiomt(univ,prem,bod) +{ + exists_var.push_back(evar); + exists_bounds.push_back(bound); +} + +string_axiomt::string_axiomt(exprt prem, exprt bod) { - qvar = index; premise = prem; + is_quantified = false; body = bod; } string_axiomt::string_axiomt(exprt bod) { premise = true_exprt(); + is_quantified = false; body = bod; } +string_axiomt::string_axiomt() +{ + premise = false_exprt(); + body = true_exprt(); + is_quantified = false; +} + + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) @@ -80,6 +99,7 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_substring_func = "__CPROVER_uninterpreted_substring"; string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; + string_contains_func = "__CPROVER_uninterpreted_strcontains"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; } @@ -390,6 +410,8 @@ bvt string_refinementt::convert_function_application( return convert_string_is_prefix(expr); } else if (id == string_is_suffix_func) { return convert_string_is_suffix(expr); + } else if (id == string_contains_func) { + return convert_string_contains(expr); } } @@ -427,13 +449,42 @@ void string_refinementt::add_lemma(const exprt &lemma) cur.push_back(lemma); } +void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body) +{ + if (!seen_instances.insert(implies_exprt(prem,body)).second) + { + debug() << "add_implies_lemma: already seen" << eom; + return; + } + + if(body == true_exprt()) + { + debug() << "add_implies_lemma: tautology" << eom; + return; + } + + satcheck_no_simplifiert sat_check; + SUB solver(ns, sat_check); + solver << prem; + + switch (solver()) { + case decision_proceduret::D_UNSATISFIABLE: + debug() << "add_implies_lemma: precondition unsatisfiable" << eom; + break; + case decision_proceduret::D_SATISFIABLE: + debug() << "add_implies_lemma: precondition satisfiable" << eom; + default: + add_lemma(implies_exprt(prem,body)); + } +} + void string_refinementt::add_lemmas(axiom_vect & lemmas) { axiom_vect::iterator it; for(it = lemmas.begin(); it != lemmas.end(); it++) { // distinguish between lemmas that are not universaly quantified - if(!(it->is_quantified())) + if(!(it->is_quantified)) add_lemma(it->body); else string_axioms.push_back(*it); @@ -536,21 +587,21 @@ bvt string_refinementt::convert_string_is_prefix( assert(f.type() == bool_typet()); bvt bv = convert_bv(isprefix); - add_lemma(implies_exprt(isprefix, s0 >= s1)); + add_lemma(implies_exprt(isprefix, s1 >= s0)); symbol_exprt qvar = fresh_symbol("qvar", index_type); - string_axioms.emplace_back(qvar, and_exprt(isprefix, s1 > qvar), - equal_exprt(s1[qvar],s0[qvar])); + string_axioms.emplace_back(qvar, and_exprt(isprefix, s0 > qvar), + equal_exprt(s0[qvar],s1[qvar])); symbol_exprt witness = fresh_symbol("index", index_type); - // forall witness < s1.length. isprefix => s1[witness] = s2[witness] + // forall witness < s0.length. isprefix => s0[witness] = s2[witness] - or_exprt s1_notpref_s0(not_exprt(s0 >= s1), - and_exprt(s1 > witness, - notequal_exprt(s1[witness],s0[witness]))); + or_exprt s0_notpref_s1(not_exprt(s1 >= s0), + and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[witness]))); - add_lemma(implies_exprt (not_exprt(isprefix),s1_notpref_s0)); + add_lemma(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); return bv; } @@ -567,29 +618,30 @@ bvt string_refinementt::convert_string_is_suffix( string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); - // issufix => s0.length >= s1.length + + // issufix(s1,s0) => s0.length >= s1.length // && forall witness < s1.length. // issufix => s1[witness] = s0[witness + s0.length - s1.length] // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - add_lemma(implies_exprt(issuffix, s0 >= s1)); + add_lemma(implies_exprt(issuffix, s1 >= s0)); symbol_exprt qvar = fresh_symbol("qvar", index_type); exprt qvar_shifted = plus_exprt(qvar, - minus_exprt(s0.length(), s1.length())); - string_axioms.emplace_back(qvar, and_exprt(issuffix, s1 > qvar), - equal_exprt(s1[qvar],s0[qvar_shifted])); + minus_exprt(s1.length(), s0.length())); + string_axioms.emplace_back(qvar, and_exprt(issuffix, s0 > qvar), + equal_exprt(s0[qvar],s1[qvar_shifted])); symbol_exprt witness = fresh_symbol("index", index_type); exprt shifted = plus_exprt(witness, - minus_exprt(s0.length(), s1.length())); + minus_exprt(s1.length(), s0.length())); implies_exprt lemma2(not_exprt(issuffix), - or_exprt(s1 > s0, - and_exprt(s1 > witness, - notequal_exprt(s1[witness],s0[shifted])))); + or_exprt(s0 > s1, + and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[shifted])))); add_lemma(lemma2); @@ -600,6 +652,62 @@ bvt string_refinementt::convert_string_is_suffix( } +bvt string_refinementt::convert_string_contains( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); // bad args to string contains? + + symbol_exprt contains = fresh_symbol("contains"); + boolean_symbols.push_back(contains); + + string_exprt s0 = make_string(args[0]); + string_exprt s1 = make_string(args[1]); + + // contains => s0.length >= s1.length + // && startpos <= s0.length - s1.length + // && forall qvar < s1.length. + // contains => s1[qvar] = s0[startpos + qvar] + // !contains => s1.length > s0.length + // || (forall startpos <= s0.length - s1.length. + // exists witness < s1.length && s1[witness] != s0[witness + startpos] + + add_lemma(implies_exprt(contains, s0 >= s1)); + + symbol_exprt startpos = fresh_symbol("startpos", index_type); + add_lemma(implies_exprt(contains,binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); + + index_symbols.push_back(startpos); + symbol_exprt qvar = fresh_symbol("qvar", index_type); + exprt qvar_shifted = plus_exprt(qvar, startpos); + string_axioms.emplace_back(qvar, and_exprt(contains, s1 > qvar), + equal_exprt(s1[qvar],s0[qvar_shifted])); + + // We rewrite the axiom for !contains as: + // forall startpos. exists witness. (!contains && |s0| >= |s1| && stratpos <= |s0| - |s1|) + // ==> witness < |s1| && s1[witness] != s0[startpos+witness] + + symbol_exprt qstartpos = fresh_symbol("qstartpos", index_type); + symbol_exprt witness = fresh_symbol("witness", index_type); + exprt shifted = plus_exprt(witness, qstartpos); + + string_axioms.emplace_back + (qstartpos,witness,s1.length(), + and_exprt(not_exprt(contains), + and_exprt(s0 >= s1, + binary_relation_exprt + (qstartpos,ID_le, + minus_exprt(s0.length(),s1.length())))), + notequal_exprt(s1[witness],s0[shifted])); + + + assert(f.type() == bool_typet()); + bvt bv = convert_bv(contains); + + return bv; +} + + bvt string_refinementt::convert_char_literal( const function_application_exprt &f) @@ -676,10 +784,9 @@ void string_refinementt::add_instantiations(bool first) const exprt &val = *j; for (size_t k = 0; k < string_axioms.size(); ++k) { - exprt lemma = instantiate(string_axioms[k], s, val); - if (lemma.is_not_nil() && seen_instances.insert(lemma).second) { - add_lemma(lemma); - } + string_axiomt lemma = instantiate(string_axioms[k], s, val); + assert(!lemma.is_quantified); + add_implies_lemma(lemma.premise,lemma.body); } } @@ -784,6 +891,12 @@ bool string_refinementt::check_axioms() fmodel[*it] = get(*it); } + for(std::vector::iterator it = index_symbols.begin(); + it != index_symbols.end(); it++) { + debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + fmodel[*it] = get(*it); + } + std::vector< std::pair > violated; debug() << "there are " << string_axioms.size() << " string axioms" << eom; @@ -800,7 +913,7 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { //debug() << "satisfiable" << eom; - exprt val = solver.get(axiom.qvar); + exprt val = solver.get(axiom.univ_var); violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: @@ -826,11 +939,10 @@ bool string_refinementt::check_axioms() const string_axiomt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); exprt body(axiom.body); - replace_expr(axiom.qvar, val, premise); - replace_expr(axiom.qvar, val, body); implies_exprt instance(premise, body); + replace_expr(axiom.univ_var, val, instance); if (seen_instances.insert(instance).second) { - add_lemma(instance); + add_implies_lemma(premise,body); all_seen = false; } else debug() << "instance already seen" << eom; // TODO - add backwards instantiations @@ -868,7 +980,7 @@ namespace { } // namespace -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f, exprt & positive, exprt & negative) { //std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; @@ -900,10 +1012,13 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con } } - exprt ret = nil_exprt(); bool found = false; bool neg = false; // true if qvar appears negatively in f, ie positively in the elements - + + negative = index_zero; + positive = index_zero; + + for (std::map::iterator it = elems.begin(); it != elems.end(); it++) { const exprt &t = it->first; @@ -914,26 +1029,40 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con } else debug() << "in string_refinementt::compute_subst:" << " warning: occurences of qvar canceled out " << eom; - } else { - if (it->second == 0) { - } else if (it->second == -1) { - if(ret.is_nil()) ret = unary_minus_exprt(t); - else ret = minus_exprt(ret, t); - } else if (it->second == 1) { - if(ret.is_nil()) ret = t; - else ret = plus_exprt(ret, t); - } - } + } else + if (it->second != 0) + if (it->second == -1) + if(negative == index_zero) negative = t; + else negative = plus_exprt(negative,t); + else if (it->second == 1) + if(positive == index_zero) positive = t; + else positive = plus_exprt(positive, t); + else assert(false); } + if (!found) { // we should add a lemma to say that val == f - debug() << "not sure we need to add a lemma: " << eom; - //add_lemma(equal_exprt(val,f)); + debug() << "not sure we need to add a lemma: to say val == f" << eom; + add_lemma(equal_exprt(val,f)); return qvar; } - if (neg && !ret.is_nil()) return unary_minus_exprt(ret); - else return ret; + + if (neg) positive.swap(negative); + + if(positive == index_zero) + if(negative == index_zero) + return index_zero; + else + { + debug() << "return unary_minus_exprt: this probably shouldn't happen" << eom; + return unary_minus_exprt(negative); + } + else + if(negative == index_zero) + return positive; + else + return minus_exprt(positive,negative); } @@ -963,7 +1092,7 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) { void string_refinementt::update_index_set(const string_axiomt &axiom) { std::vector bounds; - get_bounds(axiom.qvar, axiom.premise, bounds); + get_bounds(axiom.univ_var, axiom.premise, bounds); std::vector to_process; to_process.push_back(axiom.body); @@ -975,7 +1104,7 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) const exprt &i = cur.op1(); // if cur is of the form s[i] and qvar does not appear in i... - if(!find_qvar(i,axiom.qvar)) { + if(!find_qvar(i,axiom.univ_var)) { assert(s.type() == string_type.get_content_type()); expr_sett &idxs = index_set[s]; idxs.insert(bounds.begin(), bounds.end()); @@ -1042,24 +1171,54 @@ exprt find_index(const exprt & expr, const exprt & str) { -exprt string_refinementt::instantiate(const string_axiomt &axiom, +string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { exprt idx = find_index(axiom.body,str); // what if idx is qvar or if there are several indexes? - if(idx.is_nil()) return nil_exprt(); - if(!find_qvar(idx,axiom.qvar)) return nil_exprt(); + if(idx.is_nil()) return string_axiomt(); + if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); - exprt r = compute_subst(axiom.qvar, val, idx); + exprt positive; + exprt negative; + exprt r = compute_subst(axiom.univ_var, val, idx,positive,negative); exprt premise(axiom.premise); exprt body(axiom.body); - implies_exprt instance(premise, body); /*debug() << "string_refinementt::instantiate : replaces " << eom - << "occurances of" << pretty_short(axiom.qvar) << eom - << "by " << pretty_short(r) << eom << + << "occurances of " << pretty_short(axiom.univ_var) << eom + << "by " << pretty_short(r) << eom << "in " << pretty_short(instance) << eom;*/ - replace_expr(axiom.qvar, r, instance); - return instance; + + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); + replace_expr(axiom.univ_var, r, positive); + replace_expr(axiom.univ_var, r, negative); + + + for(unsigned i=0; i < axiom.exists_var.size(); i++) { + debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables" << eom; + symbol_exprt fresh_var = fresh_symbol("exists_remove", index_type); + index_symbols.push_back(fresh_var); + + add_lemma(binary_relation_exprt(fresh_var,ID_lt,axiom.exists_bounds[i])); + /*if(find_qvar(premise,axiom.exists_var[i])){ + debug() << "warning: existential variable appearing on the premise of axiom : " + << axiom_to_string(axiom) << eom + << "we should probably disregard this lemma." << eom; + debug() << " r = " << pretty_short(r) << eom; + debug() << " str = " << pretty_short(str) << eom; + debug() << " val = " << pretty_short(val) << eom; + }*/ + replace_expr(axiom.exists_var[i],fresh_var,body); + replace_expr(axiom.exists_var[i],fresh_var,positive); + replace_expr(axiom.exists_var[i],fresh_var,negative); + replace_expr(axiom.exists_var[i],fresh_var,premise); + + } + + + //debug() << "Warning: adding condition saying that " << axiom.univ_var.get_identifier() << " is positive" << eom; //return string_axiomt(and_exprt(binary_relation_exprt(positive,ID_ge,negative),premise),body); + return string_axiomt(premise,body); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index ea990d48efc..7e4cfcecc5e 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -34,17 +34,28 @@ class string_axiomt { public: // Universally quantified symbol - symbol_exprt qvar; + symbol_exprt univ_var; + // Existentially quantified symbol + std::vector exists_var; + std::vector exists_bounds; exprt premise; exprt body; + bool is_quantified; - // Axiom of the form: forall index. prem ==> bod - string_axiomt(symbol_exprt index, exprt prem, exprt bod); + // Axiom of the form: forall qvar. prem ==> bod + string_axiomt(symbol_exprt qvar, exprt prem, exprt bod); + + // Axiom of the form: forall univ. prem ==> exists evar < b. bod + string_axiomt(symbol_exprt univ, symbol_exprt evar, exprt bound, exprt prem, exprt bod); // Axiom with no quantification + string_axiomt(exprt prem, exprt bod); + + // Axiom with no quantification, and no premise string_axiomt(exprt bod); - inline bool is_quantified() {return (premise != true_exprt());} + // True axiom + string_axiomt(); }; typedef std::vector axiom_vect; @@ -80,9 +91,9 @@ class string_exprt : public struct_exprt { { return binary_relation_exprt(length(), ID_le, rhs.length()); } inline binary_relation_exprt operator>= (string_exprt rhs) { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt operator< (const symbol_exprt & rhs) + inline binary_relation_exprt operator< (const exprt & rhs) { return binary_relation_exprt(length(), ID_lt, rhs); } - inline binary_relation_exprt operator> (const symbol_exprt & rhs) + inline binary_relation_exprt operator> (const exprt & rhs) { return binary_relation_exprt(rhs, ID_lt, length()); } private: @@ -123,8 +134,10 @@ class string_refinementt: public bv_refinementt inline std::string axiom_to_string(const string_axiomt & ax) { - return ("forall " + pretty_short(ax.qvar) + ". (" - + pretty_short(ax.premise) + ") ==> " + pretty_short(ax.body)); + return ("forall " + pretty_short(ax.univ_var) + ". (" + + pretty_short(ax.premise) + ") ==> " + + (ax.exists_var.size() >= 1 ?("exists "+pretty_short(ax.exists_var[0])+". "):"") + + pretty_short(ax.body)); } @@ -138,6 +151,7 @@ class string_refinementt: public bv_refinementt irep_idt string_substring_func; irep_idt string_is_prefix_func; irep_idt string_is_suffix_func; + irep_idt string_contains_func; irep_idt string_char_set_func; private: @@ -172,6 +186,7 @@ class string_refinementt: public bv_refinementt bvt convert_string_length(const function_application_exprt &f); bvt convert_string_is_prefix(const function_application_exprt &f); bvt convert_string_is_suffix(const function_application_exprt &f); + bvt convert_string_contains(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); @@ -179,6 +194,10 @@ class string_refinementt: public bv_refinementt // Boolean symbols that are used to know whether the results // of some functions should be true. std::vector boolean_symbols; + + // Symbols used in existential quantifications + std::vector index_symbols; + axiom_vect string_axioms; // Create a new string expression and add the necessary lemma @@ -196,6 +215,9 @@ class string_refinementt: public bv_refinementt void add_lemma(const exprt &lemma); void add_lemmas(axiom_vect & lemmas); + // Check that the precondition is satisfiable before adding a lemma, and that we haven't added it before + void add_implies_lemma(const exprt &prem, const exprt &body); + void add_instantiations(bool first=false); bool check_axioms(); @@ -213,7 +235,7 @@ class string_refinementt: public bv_refinementt // Computes one index [v1] in which [axiom.idx] appears, takes the // corresponding substitition [r] (obtained with [compute_subst]). // Then substitutes [axiom.idx] with [r] in [axiom]. - exprt instantiate(const string_axiomt &axiom, const exprt &str, + string_axiomt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); // For expressions f of a certain form, // @@ -225,7 +247,7 @@ class string_refinementt: public bv_refinementt // Rewrites it as a sum of qvar and elements in list // // elems different from qvar. // // Takes e minus the sum of the element in elems. // - exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); + exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f, exprt & positive, exprt & negative); // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); From 96d30c13d0929e0289f16528af83ba5f08f5a857 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 18 Aug 2016 10:11:23 +0100 Subject: [PATCH 052/221] changed the index type to be signed in order to accomodate some functions like index_of, a drawback is that we have to add lemmas saying that the length of each string is positive --- regression/strings/cprover-string-hack.h | 19 +- src/solvers/refinement/string_refinement.cpp | 215 +++++++++++++------ src/solvers/refinement/string_refinement.h | 53 +++++ 3 files changed, 211 insertions(+), 76 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index ff81ff44b59..febbaf5e0f6 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -1,5 +1,6 @@ typedef struct __CPROVER_string { char *s; } __CPROVER_string; -typedef struct __CPROVER_char { char c; } __CPROVER_char; +//typedef struct __CPROVER_char { char c; } __CPROVER_char; +typedef unsigned char __CPROVER_char; /****************************************************************************** * CPROVER string functions @@ -38,6 +39,12 @@ typedef struct __CPROVER_char { char c; } __CPROVER_char; /* test whether p contains s */ #define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_strcontains(p, s) +/* first index where character c appears, -1 if not found */ +#define __CPROVER_string_index_of(s, c) __CPROVER_uninterpreted_strindexof(s, c) + +/* last index where character c appears */ +#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_strlastindexof(s, c) + /* returns a new string obtained from s by setting s[p] = c */ #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) @@ -45,15 +52,17 @@ typedef struct __CPROVER_char { char c; } __CPROVER_char; /****************************************************************************** * don't use these directly ******************************************************************************/ -extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, unsigned pos); +extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, int pos); extern __CPROVER_bool __CPROVER_uninterpreted_string_equal(__CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); -extern unsigned __CPROVER_uninterpreted_strlen(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, unsigned i, unsigned j); +extern int __CPROVER_uninterpreted_strlen(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, int i, int j); extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); extern __CPROVER_bool __CPROVER_uninterpreted_strcontains(__CPROVER_string str1, __CPROVER_string str2); -extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, unsigned pos, __CPROVER_char c); +extern int __CPROVER_uninterpreted_strindexof(__CPROVER_string str, __CPROVER_char c); +extern int __CPROVER_uninterpreted_strlastindexof(__CPROVER_string str, __CPROVER_char c); +extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, int pos, __CPROVER_char c); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f2bbc699607..e75acb60107 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -18,16 +18,16 @@ Author: Alberto Griggio, alberto.griggio@gmail.com // This is mostly for debugging: #include #include -//#include +#include // Types used in this refinement unsignedbv_typet char_type(CHAR_WIDTH); -unsignedbv_typet index_type(INDEX_WIDTH); - -constant_exprt index_zero(integer2binary(0, INDEX_WIDTH), index_type); -constant_exprt index_one(integer2binary(1, INDEX_WIDTH), index_type); -constant_exprt index_max(integer2binary(1<<30, INDEX_WIDTH), index_type); +//unsignedbv_typet index_type(INDEX_WIDTH); +signedbv_typet index_type(INDEX_WIDTH); +constant_exprt index_of_int(int i) { + return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); +} // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { @@ -101,6 +101,8 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; string_contains_func = "__CPROVER_uninterpreted_strcontains"; string_char_set_func = "__CPROVER_uninterpreted_char_set"; + string_index_of_func = "__CPROVER_uninterpreted_strindexof"; + string_last_index_of_func = "__CPROVER_uninterpreted_strlastindexof"; } string_refinementt::~string_refinementt() @@ -118,11 +120,12 @@ bool string_refinementt::is_unrefined_string_type(const typet &type) bool string_refinementt::is_unrefined_char_type(const typet &type) { - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_char"); +/*if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return tag == irep_idt("__CPROVER_char"); } - return false; + return false;*/ + return (type == char_type); } unsigned string_refinementt::next_symbol_id = 1; @@ -149,20 +152,37 @@ string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ return symbol_to_string[expr.get_identifier()]; } +void string_exprt::of_if(const if_exprt &expr, axiom_vect & axioms) +{ + assert(string_refinementt::is_unrefined_string_type(expr.true_case().type())); + string_exprt t = of_expr(expr.true_case(),axioms); + assert(string_refinementt::is_unrefined_string_type(expr.false_case().type())); + string_exprt f = of_expr(expr.false_case(),axioms); + + axioms.emplace_back(implies_exprt(expr.cond(),equal_exprt(length(),t.length()))); + symbol_exprt qvar = string_refinementt::fresh_symbol("string_if",index_type); + axioms.emplace_back(qvar,and_exprt(t>qvar,expr.cond()),equal_exprt((*this)[qvar],t[qvar])) +; + axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); + symbol_exprt qvar2 = string_refinementt::fresh_symbol("string_if",index_type); + axioms.emplace_back(qvar2,and_exprt(t>qvar2,expr.cond()),equal_exprt((*this)[qvar],f[qvar])); +} + string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & axioms) { - if(unrefined_string.id()==ID_function_application) { - string_exprt s; + string_exprt s; + if(unrefined_string.id()==ID_function_application) s.of_function_application(to_function_application_expr(unrefined_string), axioms); - return s; - } - else if(unrefined_string.id()==ID_symbol) { - return find_symbol(to_symbol_expr(unrefined_string)); - } - else { - throw ("string_exprt of " + unrefined_string.pretty() - + "which is not a symbol or a function application"); - } + else if(unrefined_string.id()==ID_symbol) + s = find_symbol(to_symbol_expr(unrefined_string)); + else if(unrefined_string.id()==ID_if) + s.of_if(to_if_expr(unrefined_string),axioms); + else + throw ("string_exprt of:\n" + unrefined_string.pretty() + + "\nwhich is not a symbol or a function application"); + + axioms.emplace_back(string_refinementt::is_positive(s.length())); + return s; } void string_exprt::of_function_application(const function_application_exprt & expr, axiom_vect & axioms) @@ -231,15 +251,15 @@ void string_exprt::of_string_concat(const function_application_exprt &f, axiom_v binary_relation_exprt lem2(length(), ID_ge, s2.length()); axioms.push_back(string_axiomt(lem2)); - symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); - - string_axiomt a1(idx, binary_relation_exprt(idx, ID_lt, s1.length()), + symbol_exprt idx = string_refinementt::fresh_symbol("index_concat", index_type); + + string_axiomt a1(idx, and_exprt(string_refinementt::is_positive(idx),binary_relation_exprt(idx, ID_lt, s1.length())), equal_exprt(s1[idx], index_exprt(content(), idx))); - symbol_exprt idx2 = string_refinementt::fresh_symbol("index", index_type); + symbol_exprt idx2 = string_refinementt::fresh_symbol("index_concat2", index_type); - string_axiomt a2(idx2, binary_relation_exprt(idx2, ID_lt, s2.length()), + string_axiomt a2(idx2, and_exprt(string_refinementt::is_positive(idx2),binary_relation_exprt(idx2, ID_lt, s2.length())), equal_exprt(s2[idx2], index_exprt(content(), plus_exprt(idx2,s1.length())))); @@ -257,7 +277,7 @@ void string_exprt::of_string_substring typecast_exprt i(args[1], index_type); typecast_exprt j(args[2], index_type); - symbol_exprt idx = string_refinementt::fresh_symbol("index", index_type); + symbol_exprt idx = string_refinementt::fresh_symbol("index_substring", index_type); // forall idx < str.length, str[idx] = arg_str[idx+i] string_axiomt a(idx, @@ -307,6 +327,10 @@ void string_exprt::of_string_char_set void string_refinementt::post_process() { //debug() << "string_refinementt::post_process()" << eom; + for(int i = 0; i < string_axioms.size(); i++) + if(!string_axioms[i].is_quantified) + add_implies_lemma(string_axioms[i].premise,string_axioms[i].body); + add_instantiations(true); SUB::post_process(); @@ -412,6 +436,10 @@ bvt string_refinementt::convert_function_application( return convert_string_is_suffix(expr); } else if (id == string_contains_func) { return convert_string_contains(expr); + } else if (id == string_index_of_func) { + return convert_string_index_of(expr); + } else if (id == string_last_index_of_func) { + return convert_string_last_index_of(expr); } } @@ -443,7 +471,6 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma) { debug() << "adding lemma " << pretty_short(lemma) << eom; - //lemma.pretty() << eom; prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); @@ -452,10 +479,7 @@ void string_refinementt::add_lemma(const exprt &lemma) void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body) { if (!seen_instances.insert(implies_exprt(prem,body)).second) - { - debug() << "add_implies_lemma: already seen" << eom; - return; - } + return; if(body == true_exprt()) { @@ -472,7 +496,6 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body debug() << "add_implies_lemma: precondition unsatisfiable" << eom; break; case decision_proceduret::D_SATISFIABLE: - debug() << "add_implies_lemma: precondition satisfiable" << eom; default: add_lemma(implies_exprt(prem,body)); } @@ -510,7 +533,6 @@ string_exprt string_refinementt::make_string(const exprt & str) { if(str.id()==ID_symbol) { string_exprt s = string_exprt::find_symbol(to_symbol_expr(str)); - //symbol_to_string[sym.get_identifier()] = s; return s; } else { @@ -524,9 +546,8 @@ string_exprt string_refinementt::make_string(const exprt & str) bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { - symbol_exprt eq = fresh_symbol("equal"); - boolean_symbols.push_back(eq); assert(f.type() == bool_typet()); + symbol_exprt eq = fresh_boolean("equal"); bvt bv = convert_bv(eq); const function_application_exprt::argumentst &args = f.arguments(); @@ -543,21 +564,21 @@ bvt string_refinementt::convert_string_equal( // forall i < s1.length. eq => s1[i] = s2[i] // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) - symbol_exprt witness = fresh_symbol("index", index_type); - symbol_exprt qvar = fresh_symbol("qvar", index_type); + symbol_exprt witness = fresh_index("witness_unequal"); + symbol_exprt qvar = fresh_symbol("qvar_equal", index_type); - add_lemma(implies_exprt(eq, equal_exprt(s1.length(), s2.length()))); + string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); string_axioms.emplace_back(qvar, - and_exprt(eq, s1 > qvar), + and_exprt(and_exprt(eq, s1 > qvar),is_positive(qvar)), equal_exprt(s1[qvar],s2[qvar])); - implies_exprt - lemma2(not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - and_exprt(s1 > witness, - notequal_exprt(s1[witness],s2[witness])))); - add_lemma(lemma2); + string_axioms.emplace_back + (not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + and_exprt(s1 > witness, + and_exprt(is_positive(witness), + notequal_exprt(s1[witness],s2[witness]))))); return bv; } @@ -574,6 +595,10 @@ bvt string_refinementt::convert_string_length( return bv; } +exprt string_refinementt::is_positive(const exprt & x) +{ return binary_relation_exprt(x, ID_ge, index_of_int(0)); } + + bvt string_refinementt::convert_string_is_prefix( const function_application_exprt &f) { @@ -589,19 +614,21 @@ bvt string_refinementt::convert_string_is_prefix( add_lemma(implies_exprt(isprefix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("qvar", index_type); + symbol_exprt qvar = fresh_symbol("qvar_prefix", index_type); string_axioms.emplace_back(qvar, and_exprt(isprefix, s0 > qvar), equal_exprt(s0[qvar],s1[qvar])); - symbol_exprt witness = fresh_symbol("index", index_type); + symbol_exprt witness = fresh_symbol("index_prefix", index_type); + index_symbols.push_back(witness); // forall witness < s0.length. isprefix => s0[witness] = s2[witness] or_exprt s0_notpref_s1(not_exprt(s1 >= s0), and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[witness]))); - add_lemma(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); + add_lemma(implies_exprt (not_exprt(isprefix),and_exprt(is_positive(witness),s0_notpref_s1))); return bv; } @@ -627,21 +654,22 @@ bvt string_refinementt::convert_string_is_suffix( add_lemma(implies_exprt(issuffix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("qvar", index_type); + symbol_exprt qvar = fresh_symbol("qvar_suffix", index_type); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); string_axioms.emplace_back(qvar, and_exprt(issuffix, s0 > qvar), equal_exprt(s0[qvar],s1[qvar_shifted])); - symbol_exprt witness = fresh_symbol("index", index_type); + symbol_exprt witness = fresh_index("witness_not_suffix"); exprt shifted = plus_exprt(witness, minus_exprt(s1.length(), s0.length())); implies_exprt lemma2(not_exprt(issuffix), - or_exprt(s0 > s1, - and_exprt(s0 > witness, - notequal_exprt(s0[witness],s1[shifted])))); + and_exprt(is_positive(witness), + or_exprt(s0 > s1, + and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[shifted]))))); add_lemma(lemma2); @@ -675,9 +703,10 @@ bvt string_refinementt::convert_string_contains( add_lemma(implies_exprt(contains, s0 >= s1)); symbol_exprt startpos = fresh_symbol("startpos", index_type); - add_lemma(implies_exprt(contains,binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - index_symbols.push_back(startpos); + + add_lemma(implies_exprt(contains,and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length()))))); + symbol_exprt qvar = fresh_symbol("qvar", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); string_axioms.emplace_back(qvar, and_exprt(contains, s1 > qvar), @@ -690,6 +719,7 @@ bvt string_refinementt::convert_string_contains( symbol_exprt qstartpos = fresh_symbol("qstartpos", index_type); symbol_exprt witness = fresh_symbol("witness", index_type); exprt shifted = plus_exprt(witness, qstartpos); + add_lemma(is_positive(witness)); string_axioms.emplace_back (qstartpos,witness,s1.length(), @@ -708,6 +738,52 @@ bvt string_refinementt::convert_string_contains( } +symbol_exprt string_refinementt::fresh_index(const irep_idt &prefix){ + symbol_exprt i = fresh_symbol(prefix,index_type); + index_symbols.push_back(i); + return i; +} + +symbol_exprt string_refinementt::fresh_boolean(const irep_idt &prefix){ + symbol_exprt b = fresh_symbol(prefix,bool_typet()); + boolean_symbols.push_back(b); + return b; +} + +bvt string_refinementt::convert_string_index_of( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); // bad args to string contains? + + symbol_exprt index = fresh_index("index_of"); + string_exprt str = make_string(args[0]); + exprt c = args[1]; + assert(is_unrefined_char_type(c.type())); + // (i = -1 || 0 <= i < s && s[i] = c) && forall n. n < i => s[n] != c + + string_axioms.push_back((string_axiomt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); + + symbol_exprt n = fresh_symbol("qvar",index_type); + + string_axioms.push_back((! string_axiomt::equality(str[n],c)) + .forall(n,index)); + + + bvt bv = convert_bv(index); + return bv; +} + +bvt string_refinementt::convert_string_last_index_of( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); // bad args to string contains? + + symbol_exprt index = fresh_index("last_index_of"); + bvt bv = convert_bv(index); + return bv; +} bvt string_refinementt::convert_char_literal( const function_application_exprt &f) @@ -965,8 +1041,8 @@ namespace { exprt e = to_treat.back(); to_treat.pop_back(); if (e.id() == ID_lt && e.op0() == qvar) { - assert(e.op1().type() == index_type); - out.push_back(minus_exprt(e.op1(), index_one)); + assert(e.op1().type() == index_type || e.op1().type() == integer_typet()); + out.push_back(minus_exprt(e.op1(), index_of_int(1))); } else if (e.id() == ID_le && e.op0() == qvar) { out.push_back(e.op1()); } else { @@ -1015,8 +1091,8 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con bool found = false; bool neg = false; // true if qvar appears negatively in f, ie positively in the elements - negative = index_zero; - positive = index_zero; + negative = index_of_int(0); + positive = index_of_int(0); for (std::map::iterator it = elems.begin(); @@ -1032,10 +1108,10 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con } else if (it->second != 0) if (it->second == -1) - if(negative == index_zero) negative = t; + if(negative == index_of_int(0)) negative = t; else negative = plus_exprt(negative,t); else if (it->second == 1) - if(positive == index_zero) positive = t; + if(positive == index_of_int(0)) positive = t; else positive = plus_exprt(positive, t); else assert(false); } @@ -1050,17 +1126,14 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con if (neg) positive.swap(negative); - if(positive == index_zero) - if(negative == index_zero) - return index_zero; - else + if(negative == index_of_int(0)) + return positive; + else + if(positive == index_of_int(0)) { debug() << "return unary_minus_exprt: this probably shouldn't happen" << eom; return unary_minus_exprt(negative); } - else - if(negative == index_zero) - return positive; else return minus_exprt(positive,negative); } @@ -1197,10 +1270,10 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, for(unsigned i=0; i < axiom.exists_var.size(); i++) { - debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables" << eom; + debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables, assume it has to be positive" << eom; symbol_exprt fresh_var = fresh_symbol("exists_remove", index_type); index_symbols.push_back(fresh_var); - + add_lemma(is_positive(fresh_var)); add_lemma(binary_relation_exprt(fresh_var,ID_lt,axiom.exists_bounds[i])); /*if(find_qvar(premise,axiom.exists_var[i])){ debug() << "warning: existential variable appearing on the premise of axiom : " diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 7e4cfcecc5e..ef44ebeecf5 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -56,6 +56,43 @@ class string_axiomt // True axiom string_axiomt(); + + // Warning: this assume no premise: + inline string_axiomt operator&&(const string_axiomt & a) { + assert(premise == true_exprt()); + return string_axiomt(and_exprt(this->body, a.body)); + } + + inline string_axiomt operator&&(const exprt & a) { + assert(premise == true_exprt()); + return string_axiomt(and_exprt(this->body, a)); + } + + // Warning: this assume no premise: + inline string_axiomt operator||(const string_axiomt & a) { + assert(premise == true_exprt()); + return string_axiomt(or_exprt(this->body, a.body)); + } + + inline string_axiomt operator||(const exprt & a) { + assert(premise == true_exprt()); + return string_axiomt(or_exprt(this->body, a)); + } + + // Add an universal quantifier, assume the premise are empty + inline string_axiomt forall(symbol_exprt univ, exprt bound) { + assert(premise == true_exprt()); + return string_axiomt(univ,binary_relation_exprt(univ,ID_lt,bound), body); + } + + inline static string_axiomt equality(const exprt & a, const exprt &b) { + return string_axiomt(equal_exprt(a,b)); + } + + inline string_axiomt operator!() { + assert(premise == true_exprt()); + return string_axiomt(not_exprt(body)); + } }; typedef std::vector axiom_vect; @@ -104,6 +141,8 @@ class string_exprt : public struct_exprt { void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr,axiom_vect &axioms); + + void of_if(const if_exprt &expr, axiom_vect & axioms); friend inline string_exprt &to_string_expr(exprt &expr) { @@ -115,6 +154,11 @@ class string_exprt : public struct_exprt { string_exprt &to_string_expr(exprt expr); +/* +class char_exprt : public exprt { +public: + char_exprt(const exprt & unrefined_char); + };*/ class string_refinementt: public bv_refinementt { @@ -132,6 +176,8 @@ class string_refinementt: public bv_refinementt static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); + symbol_exprt fresh_index(const irep_idt &prefix); + symbol_exprt fresh_boolean(const irep_idt &prefix); inline std::string axiom_to_string(const string_axiomt & ax) { return ("forall " + pretty_short(ax.univ_var) + ". (" @@ -153,6 +199,10 @@ class string_refinementt: public bv_refinementt irep_idt string_is_suffix_func; irep_idt string_contains_func; irep_idt string_char_set_func; + irep_idt string_index_of_func; + irep_idt string_last_index_of_func; + + static exprt is_positive(const exprt & x); private: typedef bv_refinementt SUB; @@ -187,6 +237,8 @@ class string_refinementt: public bv_refinementt bvt convert_string_is_prefix(const function_application_exprt &f); bvt convert_string_is_suffix(const function_application_exprt &f); bvt convert_string_contains(const function_application_exprt &f); + bvt convert_string_index_of(const function_application_exprt &f); + bvt convert_string_last_index_of(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); @@ -264,6 +316,7 @@ class string_refinementt: public bv_refinementt // succinct and pretty way to display an expression std::string pretty_short(const exprt & expr); + }; #endif From 24bfd5254de3b7c9682e2aa3b21508c4d6a12d1c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 19 Aug 2016 10:17:49 +0100 Subject: [PATCH 053/221] more precise tests, with both assertions that should succeed and fail --- regression/strings/test1/test.c | 1 + regression/strings/test1/test.desc | 5 +- regression/strings/test2/test.c | 1 + regression/strings/test2/test.desc | 5 +- regression/strings/test3/test.c | 1 + regression/strings/test3/test.desc | 7 +- regression/strings/test_concat/test.c | 10 +- regression/strings/test_concat/test.desc | 5 +- regression/strings/test_equal/test.c | 2 +- regression/strings/test_equal/test.desc | 5 +- regression/strings/test_strlen/test.c | 6 +- regression/strings/test_strlen/test.desc | 5 +- regression/strings/test_suffix/test.c | 1 + regression/strings/test_suffix/test.desc | 5 +- src/solvers/refinement/string_refinement.cpp | 232 ++++++++++--------- src/solvers/refinement/string_refinement.h | 15 +- 16 files changed, 169 insertions(+), 137 deletions(-) diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c index df1776a5b9d..d3830e38a3f 100644 --- a/regression/strings/test1/test.c +++ b/regression/strings/test1/test.c @@ -13,5 +13,6 @@ int main() c1 = __CPROVER_char_at(s, i); c2 = __CPROVER_char_literal("p"); assert (c1 == c2); + assert (c1 != c2); return 0; } diff --git a/regression/strings/test1/test.desc b/regression/strings/test1/test.desc index 6a0f2afbeb5..3483081c0f0 100644 --- a/regression/strings/test1/test.desc +++ b/regression/strings/test1/test.desc @@ -1,7 +1,8 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion c1 == c2: SUCCESS$ +^\[main.assertion.2\] assertion c1 != c2: FAILURE$ -- diff --git a/regression/strings/test2/test.c b/regression/strings/test2/test.c index 827cc5119b8..aedc37ba3b3 100644 --- a/regression/strings/test2/test.c +++ b/regression/strings/test2/test.c @@ -8,5 +8,6 @@ int main() s = __CPROVER_string_literal("pippo"); n = __CPROVER_string_length(s); assert(n == 5); + assert(n != 5); return 0; } diff --git a/regression/strings/test2/test.desc b/regression/strings/test2/test.desc index 6373a3a0bcf..5e76e674b95 100644 --- a/regression/strings/test2/test.desc +++ b/regression/strings/test2/test.desc @@ -1,7 +1,8 @@ CORE test.c --z3 -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion n == 5: SUCCESS$ +^\[main.assertion.2\] assertion n != 5: FAILURE$ -- diff --git a/regression/strings/test3/test.c b/regression/strings/test3/test.c index 54dcf90f3e1..2fa4b22e017 100644 --- a/regression/strings/test3/test.c +++ b/regression/strings/test3/test.c @@ -15,6 +15,7 @@ int main() assert(__CPROVER_string_length(s) == i + 5); assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("p!o"), s)); return 0; } diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 0f5bd6ccca7..6ea4200c9d0 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -1,7 +1,10 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strlen(s) == i + 5: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"po\"), s): SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_uninterpreted_char_at(s, i) == __CPROVER_uninterpreted_char_literal(\"p\"): SUCCESS$ +^\[main.assertion.4\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"p!o\"), s): FAILURE$ -- diff --git a/regression/strings/test_concat/test.c b/regression/strings/test_concat/test.c index 23c74d451e3..ceab520e960 100644 --- a/regression/strings/test_concat/test.c +++ b/regression/strings/test_concat/test.c @@ -5,18 +5,12 @@ int main() { __CPROVER_string s,t,u; - //s = __CPROVER_string_literal("pi"); - //t = __CPROVER_string_literal("ppo"); unsigned i = __CPROVER_string_length(s); - //t = __CPROVER_string_literal("ppo"); - __CPROVER_assume(i < 10); - __CPROVER_assume(__CPROVER_string_equal(t, __CPROVER_string_literal("ppo"))); + t = __CPROVER_string_literal("ppo"); u = __CPROVER_string_concat(s, t); - //assert(__CPROVER_char_at(u, 4) == __CPROVER_char_literal("o")); - //assert(__CPROVER_string_equal(u, __CPROVER_string_literal("pippo"))); - __CPROVER_char c = __CPROVER_char_at(u,i); assert(c == __CPROVER_char_literal("p")); + assert(__CPROVER_char_at(u,2) == __CPROVER_char_literal("p")); return 0; } diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 0f5bd6ccca7..83f53415f61 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -1,7 +1,8 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion c == __CPROVER_uninterpreted_char_literal(\"p\"): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_char_at(u, 2) == __CPROVER_uninterpreted_char_literal(\"p\"): FAILURE$ -- diff --git a/regression/strings/test_equal/test.c b/regression/strings/test_equal/test.c index d7c9a5f9f70..2f26689589d 100644 --- a/regression/strings/test_equal/test.c +++ b/regression/strings/test_equal/test.c @@ -7,7 +7,7 @@ int main() __CPROVER_string s; s = __CPROVER_string_literal("pippo"); assert(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); - + assert(__CPROVER_string_equal(s, __CPROVER_string_literal("mippo"))); return 0; } diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index 0f5bd6ccca7..514b9cd2e3b 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -1,7 +1,8 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(s, __CPROVER_uninterpreted_string_literal(\"pippo\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(s, __CPROVER_uninterpreted_string_literal(\"mippo\")): FAILURE$ -- diff --git a/regression/strings/test_strlen/test.c b/regression/strings/test_strlen/test.c index fbbe9abc291..d3a4348bd43 100644 --- a/regression/strings/test_strlen/test.c +++ b/regression/strings/test_strlen/test.c @@ -5,12 +5,12 @@ int main() { __CPROVER_string s,t; - unsigned len_s, len_t; + int len_s, len_t; s = __CPROVER_string_literal("abc"); t = __CPROVER_string_literal("xyz"); len_s = __CPROVER_string_length(s); len_t = __CPROVER_string_length(t); - unsigned b = ( len_s == len_t ); - assert(b); + assert(len_s == len_t); + assert(len_s == 2); return 0; } diff --git a/regression/strings/test_strlen/test.desc b/regression/strings/test_strlen/test.desc index 0f5bd6ccca7..a35e2499c9f 100644 --- a/regression/strings/test_strlen/test.desc +++ b/regression/strings/test_strlen/test.desc @@ -1,7 +1,8 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion len_s == len_t: SUCCESS$ +^\[main.assertion.2\] assertion len_s == 2: FAILURE$ -- diff --git a/regression/strings/test_suffix/test.c b/regression/strings/test_suffix/test.c index 7179319499f..d28bde61712 100644 --- a/regression/strings/test_suffix/test.c +++ b/regression/strings/test_suffix/test.c @@ -9,6 +9,7 @@ int main() __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); + assert(__CPROVER_string_issuffix(__CPROVER_string_literal("pp"),s)); return 0; } diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc index 0f5bd6ccca7..623fb860239 100644 --- a/regression/strings/test_suffix/test.desc +++ b/regression/strings/test_suffix/test.desc @@ -1,7 +1,8 @@ CORE test.c --pass -^EXIT=0$ +^EXIT=10$ ^SIGNAL=0$ -^VERIFICATION SUCCESSFUL$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"po\"), s): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"pp\"), s): FAILURE$ -- diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index e75acb60107..9d4dc86851f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -327,11 +327,24 @@ void string_exprt::of_string_char_set void string_refinementt::post_process() { //debug() << "string_refinementt::post_process()" << eom; + std::vector new_axioms; for(int i = 0; i < string_axioms.size(); i++) if(!string_axioms[i].is_quantified) add_implies_lemma(string_axioms[i].premise,string_axioms[i].body); + else + new_axioms.push_back(string_axioms[i]); + + string_axioms = new_axioms; + //add_instantiations(true); - add_instantiations(true); + nb_sat_iteration = 0; + + update_index_set(string_axioms); + update_index_set(cur); + cur.clear(); + add_instantiations(); + // We should check at each step whether the lemmas are satisfiable or not + // while(!index_set.empty()) {cur.clear(); add_instantiations(); index_set.clear(); update_index_set(cur); } SUB::post_process(); } @@ -449,11 +462,16 @@ bvt string_refinementt::convert_function_application( void string_refinementt::check_SAT() { SUB::check_SAT(); - if (!progress) { - if (!check_axioms()) { - progress = true; - add_instantiations(); - } + if(!progress){ + if(!check_axioms()) + { + index_set.clear(); + update_index_set(cur); + progress=(!index_set.empty()); + cur.clear(); + add_instantiations(); + + } } } @@ -474,6 +492,7 @@ void string_refinementt::add_lemma(const exprt &lemma) prop.l_set_to_true(convert(lemma)); cur.push_back(lemma); + all_lemmas.insert(lemma); } void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body) @@ -487,6 +506,7 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body return; } + /* satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); solver << prem; @@ -499,48 +519,29 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body default: add_lemma(implies_exprt(prem,body)); } + */ + if(prem == true_exprt()) + add_lemma(body); + else + add_lemma(implies_exprt(prem,body)); } -void string_refinementt::add_lemmas(axiom_vect & lemmas) -{ - axiom_vect::iterator it; - for(it = lemmas.begin(); it != lemmas.end(); it++) - { - // distinguish between lemmas that are not universaly quantified - if(!(it->is_quantified)) - add_lemma(it->body); - else - string_axioms.push_back(*it); - } -} - - - - void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { - if(str.id()==ID_symbol) { - symbol_to_string[sym.get_identifier()] = string_exprt::find_symbol(to_symbol_expr(str)); - } - else { - axiom_vect lemmas; - symbol_to_string[sym.get_identifier()] = string_exprt::of_expr(str,lemmas); - add_lemmas(lemmas); - } + if(str.id()==ID_symbol) + symbol_to_string[sym.get_identifier()] = + string_exprt::find_symbol(to_symbol_expr(str)); + else + symbol_to_string[sym.get_identifier()] = + string_exprt::of_expr(str,string_axioms); } string_exprt string_refinementt::make_string(const exprt & str) { - if(str.id()==ID_symbol) { - string_exprt s = string_exprt::find_symbol(to_symbol_expr(str)); - return s; - } - else { - axiom_vect lemmas; - string_exprt s = string_exprt::of_expr(str,lemmas); - add_lemmas(lemmas); - return s; - } + if(str.id()==ID_symbol) + return string_exprt::find_symbol(to_symbol_expr(str)); + else + return string_exprt::of_expr(str,string_axioms); } bvt string_refinementt::convert_string_equal( @@ -605,30 +606,27 @@ bvt string_refinementt::convert_string_is_prefix( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string isprefix - symbol_exprt isprefix = fresh_symbol("isprefix"); - boolean_symbols.push_back(isprefix); + symbol_exprt isprefix = fresh_boolean("isprefix"); string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); assert(f.type() == bool_typet()); bvt bv = convert_bv(isprefix); - add_lemma(implies_exprt(isprefix, s1 >= s0)); + string_axioms.emplace_back(implies_exprt(isprefix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("qvar_prefix", index_type); + symbol_exprt qvar = fresh_symbol("qvar_isprefix", index_type); string_axioms.emplace_back(qvar, and_exprt(isprefix, s0 > qvar), equal_exprt(s0[qvar],s1[qvar])); - symbol_exprt witness = fresh_symbol("index_prefix", index_type); - index_symbols.push_back(witness); + symbol_exprt witness = fresh_index("witness_not_isprefix"); // forall witness < s0.length. isprefix => s0[witness] = s2[witness] or_exprt s0_notpref_s1(not_exprt(s1 >= s0), and_exprt(s0 > witness, - notequal_exprt(s0[witness],s1[witness]))); - add_lemma(implies_exprt (not_exprt(isprefix),and_exprt(is_positive(witness),s0_notpref_s1))); + string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),and_exprt(is_positive(witness),s0_notpref_s1))); return bv; } @@ -652,7 +650,7 @@ bvt string_refinementt::convert_string_is_suffix( // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - add_lemma(implies_exprt(issuffix, s1 >= s0)); + string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); symbol_exprt qvar = fresh_symbol("qvar_suffix", index_type); exprt qvar_shifted = plus_exprt(qvar, @@ -671,7 +669,7 @@ bvt string_refinementt::convert_string_is_suffix( and_exprt(s0 > witness, notequal_exprt(s0[witness],s1[shifted]))))); - add_lemma(lemma2); + string_axioms.emplace_back(lemma2); assert(f.type() == bool_typet()); bvt bv = convert_bv(issuffix); @@ -686,9 +684,7 @@ bvt string_refinementt::convert_string_contains( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string contains? - symbol_exprt contains = fresh_symbol("contains"); - boolean_symbols.push_back(contains); - + symbol_exprt contains = fresh_boolean("contains"); string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); @@ -700,14 +696,13 @@ bvt string_refinementt::convert_string_contains( // || (forall startpos <= s0.length - s1.length. // exists witness < s1.length && s1[witness] != s0[witness + startpos] - add_lemma(implies_exprt(contains, s0 >= s1)); + string_axioms.emplace_back(implies_exprt(contains, s0 >= s1)); - symbol_exprt startpos = fresh_symbol("startpos", index_type); - index_symbols.push_back(startpos); + symbol_exprt startpos = fresh_index("startpos_contains"); - add_lemma(implies_exprt(contains,and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length()))))); + string_axioms.emplace_back(implies_exprt(contains,and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length()))))); - symbol_exprt qvar = fresh_symbol("qvar", index_type); + symbol_exprt qvar = fresh_symbol("qvar_contains", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); string_axioms.emplace_back(qvar, and_exprt(contains, s1 > qvar), equal_exprt(s1[qvar],s0[qvar_shifted])); @@ -716,10 +711,10 @@ bvt string_refinementt::convert_string_contains( // forall startpos. exists witness. (!contains && |s0| >= |s1| && stratpos <= |s0| - |s1|) // ==> witness < |s1| && s1[witness] != s0[startpos+witness] - symbol_exprt qstartpos = fresh_symbol("qstartpos", index_type); - symbol_exprt witness = fresh_symbol("witness", index_type); + symbol_exprt qstartpos = fresh_symbol("qstartpos_contains", index_type); + symbol_exprt witness = fresh_symbol("witness_not_contains", index_type); exprt shifted = plus_exprt(witness, qstartpos); - add_lemma(is_positive(witness)); + string_axioms.emplace_back(is_positive(witness)); string_axioms.emplace_back (qstartpos,witness,s1.length(), @@ -754,7 +749,7 @@ bvt string_refinementt::convert_string_index_of( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string contains? + assert(args.size() == 2); // bad args to string index of? symbol_exprt index = fresh_index("index_of"); string_exprt str = make_string(args[0]); @@ -778,7 +773,7 @@ bvt string_refinementt::convert_string_last_index_of( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string contains? + assert(args.size() == 2); // bad args to string last index of? symbol_exprt index = fresh_index("last_index_of"); bvt bv = convert_bv(index); @@ -816,8 +811,10 @@ bvt string_refinementt::convert_string_char_at( string_exprt str = make_string(args[0]); debug() << "in convert_string_char_at: we add the index to the" << " index set" << eom; - index_set[str.content()].insert(args[1]); - return convert_bv(str[args[1]]); + + symbol_exprt char_sym = fresh_symbol("char",char_type); + string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); + return convert_bv(char_sym); } @@ -826,22 +823,23 @@ bvt string_refinementt::convert_string_char_at( // PASS Algorithm // //////////////////// -// We compute the index set for all formulas, instantiate the formulas -// with the found indexes, and add them as lemmas. -void string_refinementt::add_instantiations(bool first) -{ - //debug() << "string_refinementt::add_instantiations" << eom; - if (first) { - for (size_t i = 0; i < string_axioms.size(); ++i) { - update_index_set(string_axioms[i]); - } +void string_refinementt::update_index_set(const axiom_vect & string_axioms) { + for (size_t i = 0; i < string_axioms.size(); ++i) { + update_index_set(string_axioms[i]); } +} + +void string_refinementt::update_index_set(const std::vector & cur) { for (size_t i = 0; i < cur.size(); ++i) { update_index_set(cur[i]); } +} - cur.clear(); - +// We compute the index set for all formulas, instantiate the formulas +// with the found indexes, and add them as lemmas. +void string_refinementt::add_instantiations() +{ + //debug() << "string_refinementt::add_instantiations" << eom; debug() << "string_refinementt::add_instantiations: " << "going through the index set:" << eom; for (std::map::iterator i = index_set.begin(), @@ -860,9 +858,11 @@ void string_refinementt::add_instantiations(bool first) const exprt &val = *j; for (size_t k = 0; k < string_axioms.size(); ++k) { - string_axiomt lemma = instantiate(string_axioms[k], s, val); - assert(!lemma.is_quantified); - add_implies_lemma(lemma.premise,lemma.body); + if(string_axioms[k].is_quantified) { + string_axiomt lemma = instantiate(string_axioms[k], s, val); + assert(!lemma.is_quantified); + add_implies_lemma(lemma.premise,lemma.body); + } } } @@ -973,6 +973,7 @@ bool string_refinementt::check_axioms() fmodel[*it] = get(*it); } + debug() << "in check axiom, the model may be incomplete" << eom; std::vector< std::pair > violated; debug() << "there are " << string_axioms.size() << " string axioms" << eom; @@ -993,7 +994,6 @@ bool string_refinementt::check_axioms() violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: - //debug() << "unsatisfiable" << eom; break; default: throw "failure in checking axiom"; @@ -1005,27 +1005,36 @@ bool string_refinementt::check_axioms() debug() << "no violated property" << eom; return true; } - - bool all_seen = true; + else { + debug() << violated.size() << " string axioms can be violated" << eom; + return false; + } - debug() << violated.size() << " string axioms can be violated" << eom; + /* + + std::vector new_axioms(violated.size()); + // Checking if the current solution satisfies the constraints for (size_t i = 0; i < violated.size(); ++i) { + + new_axioms[i] = string_axioms[violated[i].first]; + debug() << " axiom " << i <<" "<< axiom_to_string(new_axioms[i]) << eom; const exprt &val = violated[i].second; const string_axiomt &axiom = string_axioms[violated[i].first]; + exprt premise(axiom.premise); exprt body(axiom.body); implies_exprt instance(premise, body); + debug() << "warning: we don't eliminate the existential quantifier" << eom; replace_expr(axiom.univ_var, val, instance); if (seen_instances.insert(instance).second) { add_implies_lemma(premise,body); - all_seen = false; - } else debug() << "instance already seen" << eom; + } else debug() << "instance already seen" << eom; // TODO - add backwards instantiations } - return all_seen; - //return false; + string_axioms = new_axioms; + */ } @@ -1056,9 +1065,9 @@ namespace { } // namespace -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f, exprt & positive, exprt & negative) +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) //, exprt & positive, exprt & negative) { - + exprt positive, negative; //std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; std::vector< std::pair > to_process; @@ -1113,7 +1122,17 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con else if (it->second == 1) if(positive == index_of_int(0)) positive = t; else positive = plus_exprt(positive, t); - else assert(false); + else { + debug() << "in string_refinementt::compute_subst:" + << " warning: several occurences of the same variable " << eom; + if(it->second > 1) + for(int i = 0; i < it->second; i++) + positive = plus_exprt(positive, t); + else + for(int i = 0; i > it->second; i--) + negative = plus_exprt(negative, t); + //assert(false); + } } @@ -1247,27 +1266,21 @@ exprt find_index(const exprt & expr, const exprt & str) { string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val) { + exprt idx = find_index(axiom.body,str); // what if idx is qvar or if there are several indexes? if(idx.is_nil()) return string_axiomt(); - if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); + //debug() << "string_refinementt::instantiate : replaces " << eom << "occurances of " << pretty_short(axiom.univ_var) << eom << "in " << pretty_short(axiom.premise) << " ===> " << pretty_short(axiom.body) << eom ; - exprt positive; - exprt negative; - exprt r = compute_subst(axiom.univ_var, val, idx,positive,negative); + if(!find_qvar(idx,axiom.univ_var)) { debug() << "! find qvar" << eom; return string_axiomt(); } + + //exprt positive; + //exprt negative; + exprt r = compute_subst(axiom.univ_var, val, idx);//,positive,negative); + //debug() << "by " << pretty_short(r) << eom; exprt premise(axiom.premise); exprt body(axiom.body); - /*debug() << "string_refinementt::instantiate : replaces " << eom - << "occurances of " << pretty_short(axiom.univ_var) << eom - << "by " << pretty_short(r) << eom - << "in " << pretty_short(instance) << eom;*/ - - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); - replace_expr(axiom.univ_var, r, positive); - replace_expr(axiom.univ_var, r, negative); - for(unsigned i=0; i < axiom.exists_var.size(); i++) { debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables, assume it has to be positive" << eom; @@ -1284,12 +1297,17 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, debug() << " val = " << pretty_short(val) << eom; }*/ replace_expr(axiom.exists_var[i],fresh_var,body); - replace_expr(axiom.exists_var[i],fresh_var,positive); - replace_expr(axiom.exists_var[i],fresh_var,negative); + //replace_expr(axiom.exists_var[i],fresh_var,positive); + //replace_expr(axiom.exists_var[i],fresh_var,negative); replace_expr(axiom.exists_var[i],fresh_var,premise); - } + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); + //replace_expr(axiom.univ_var, r, positive); + //replace_expr(axiom.univ_var, r, negative); + + //debug() << "Warning: adding condition saying that " << axiom.univ_var.get_identifier() << " is positive" << eom; //return string_axiomt(and_exprt(binary_relation_exprt(positive,ID_ge,negative),premise),body); return string_axiomt(premise,body); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index ef44ebeecf5..22d53f461cd 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -252,6 +252,8 @@ class string_refinementt: public bv_refinementt axiom_vect string_axioms; + int nb_sat_iteration; + // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. string_exprt make_string(const exprt &str); @@ -266,12 +268,13 @@ class string_refinementt: public bv_refinementt literalt convert_rest(const exprt &expr); void add_lemma(const exprt &lemma); - void add_lemmas(axiom_vect & lemmas); // Check that the precondition is satisfiable before adding a lemma, and that we haven't added it before void add_implies_lemma(const exprt &prem, const exprt &body); + // Instantiate forall constraints with index from the index set + void add_instantiations(); - void add_instantiations(bool first=false); + // Return true if the current model satisfies all the axioms bool check_axioms(); // See the definition in the PASS article @@ -280,7 +283,9 @@ class string_refinementt: public bv_refinementt // Add to the index set all the indices that appear in the formula void update_index_set(const exprt &formula); + void update_index_set(const std::vector &cur); void update_index_set(const string_axiomt &axiom); + void update_index_set(const axiom_vect &string_axioms); // Takes an universaly quantified formula [axiom], // an array of char variable [s], and an index expression [val]. @@ -299,7 +304,8 @@ class string_refinementt: public bv_refinementt // Rewrites it as a sum of qvar and elements in list // // elems different from qvar. // // Takes e minus the sum of the element in elems. // - exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f, exprt & positive, exprt & negative); + exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); + //, exprt & positive, exprt & negative); // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); @@ -310,8 +316,9 @@ class string_refinementt: public bv_refinementt // Lemmas that were already added expr_sett seen_instances; - // current set of lemmas (unquantified) + // Unquantified lemmas that have newly been added std::vector cur; + expr_sett all_lemmas; // succinct and pretty way to display an expression std::string pretty_short(const exprt & expr); From ff4d91a14de99a4d83b28a89683ebdcaa1ec23a2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 19 Aug 2016 11:49:55 +0100 Subject: [PATCH 054/221] repaired the order of instantiation when there are existential quantifiers --- src/solvers/refinement/string_refinement.cpp | 194 ++++++++++--------- src/solvers/refinement/string_refinement.h | 8 + 2 files changed, 112 insertions(+), 90 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9d4dc86851f..ad951279ca5 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -465,9 +465,9 @@ void string_refinementt::check_SAT() if(!progress){ if(!check_axioms()) { - index_set.clear(); + current_index_set.clear(); update_index_set(cur); - progress=(!index_set.empty()); + progress=(!current_index_set.empty()); cur.clear(); add_instantiations(); @@ -702,17 +702,17 @@ bvt string_refinementt::convert_string_contains( string_axioms.emplace_back(implies_exprt(contains,and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length()))))); - symbol_exprt qvar = fresh_symbol("qvar_contains", index_type); + symbol_exprt qvar = fresh_symbol("QA_contains", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); - string_axioms.emplace_back(qvar, and_exprt(contains, s1 > qvar), + string_axioms.emplace_back(qvar, and_exprt(contains, and_exprt(is_positive(qvar),s1 > qvar)), equal_exprt(s1[qvar],s0[qvar_shifted])); // We rewrite the axiom for !contains as: // forall startpos. exists witness. (!contains && |s0| >= |s1| && stratpos <= |s0| - |s1|) // ==> witness < |s1| && s1[witness] != s0[startpos+witness] - symbol_exprt qstartpos = fresh_symbol("qstartpos_contains", index_type); - symbol_exprt witness = fresh_symbol("witness_not_contains", index_type); + symbol_exprt qstartpos = fresh_symbol("QA_startpos_contains", index_type); + symbol_exprt witness = fresh_symbol("QE_witness_not_contains", index_type); exprt shifted = plus_exprt(witness, qstartpos); string_axioms.emplace_back(is_positive(witness)); @@ -720,9 +720,12 @@ bvt string_refinementt::convert_string_contains( (qstartpos,witness,s1.length(), and_exprt(not_exprt(contains), and_exprt(s0 >= s1, - binary_relation_exprt - (qstartpos,ID_le, - minus_exprt(s0.length(),s1.length())))), + and_exprt( + binary_relation_exprt + (qstartpos,ID_le, + minus_exprt(s0.length(),s1.length())), + is_positive(qstartpos) + ))), notequal_exprt(s1[witness],s0[shifted])); @@ -823,17 +826,6 @@ bvt string_refinementt::convert_string_char_at( // PASS Algorithm // //////////////////// -void string_refinementt::update_index_set(const axiom_vect & string_axioms) { - for (size_t i = 0; i < string_axioms.size(); ++i) { - update_index_set(string_axioms[i]); - } -} - -void string_refinementt::update_index_set(const std::vector & cur) { - for (size_t i = 0; i < cur.size(); ++i) { - update_index_set(cur[i]); - } -} // We compute the index set for all formulas, instantiate the formulas // with the found indexes, and add them as lemmas. @@ -841,9 +833,9 @@ void string_refinementt::add_instantiations() { //debug() << "string_refinementt::add_instantiations" << eom; debug() << "string_refinementt::add_instantiations: " - << "going through the index set:" << eom; - for (std::map::iterator i = index_set.begin(), - end = index_set.end(); i != end; ++i) { + << "going through the current index set:" << eom; + for (std::map::iterator i = current_index_set.begin(), + end = current_index_set.end(); i != end; ++i) { const exprt &s = i->first; debug() << "IS(" << pretty_short(s) << ") == {"; @@ -1065,19 +1057,13 @@ namespace { } // namespace -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) //, exprt & positive, exprt & negative) -{ - exprt positive, negative; - //std::cout << "compute_subst (" << pretty_short(qvar) << "," << val << "," << f << ")" << std::endl; - std::vector< std::pair > to_process; +std::map< exprt, int> string_refinementt::map_of_sum(const exprt &f) { // number of time the element should be added (can be negative) std::map< exprt, int> elems; - // qvar has to be equal to val - f(0) if it appears positively in f - // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively - // in f. So we start by computing val - f(0). - to_process.push_back(std::make_pair(val,true)); - to_process.push_back(std::make_pair(f, false)); + + std::vector< std::pair > to_process; + to_process.push_back(std::make_pair(f, true)); while (!to_process.empty()) { exprt cur = to_process.back().first; @@ -1096,13 +1082,54 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con else elems[cur] = elems[cur] - 1; } } + return elems; +} - bool found = false; - bool neg = false; // true if qvar appears negatively in f, ie positively in the elements - negative = index_of_int(0); - positive = index_of_int(0); +exprt string_refinementt::sum_of_map(std::map & m, bool negated) { + exprt sum = index_of_int(0); + + for (std::map::iterator it = m.begin(); + it != m.end(); it++) { + const exprt &t = it->first; + int second = negated?(-it->second):it->second; + if (second != 0) + if (second == -1) + if(sum == index_of_int(0)) sum = unary_minus_exprt(t); + else sum = minus_exprt(sum,t); + else if (second == 1) + if(sum == index_of_int(0)) sum = t; + else sum = plus_exprt(sum, t); + else { + debug() << "in string_refinementt::sum_of_map:" + << " warning: several occurences of the same variable " << eom; + if(second > 1) + for(int i = 0; i < second; i++) + sum = plus_exprt(sum, t); + else + for(int i = 0; i > second; i--) + sum = minus_exprt(sum, t); + } + } + return sum; +} + +exprt string_refinementt::simplify_sum(const exprt &f) { + std::map map = map_of_sum(f); + return sum_of_map(map); +} +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) //, exprt & positive, exprt & negative) +{ + exprt positive, negative; + // number of time the element should be added (can be negative) + // qvar has to be equal to val - f(0) if it appears positively in f + // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively + // in f. So we start by computing val - f(0). + std::map< exprt, int> elems = map_of_sum(minus_exprt(val,f)); + + bool found = false; + bool neg = false; // true if qvar appears negatively in f, ie positively in the elements for (std::map::iterator it = elems.begin(); it != elems.end(); it++) { @@ -1111,28 +1138,13 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con if(it->second == 1 || it->second == -1){ found = true; neg = (it->second == 1); - } else + } else { debug() << "in string_refinementt::compute_subst:" << " warning: occurences of qvar canceled out " << eom; - } else - if (it->second != 0) - if (it->second == -1) - if(negative == index_of_int(0)) negative = t; - else negative = plus_exprt(negative,t); - else if (it->second == 1) - if(positive == index_of_int(0)) positive = t; - else positive = plus_exprt(positive, t); - else { - debug() << "in string_refinementt::compute_subst:" - << " warning: several occurences of the same variable " << eom; - if(it->second > 1) - for(int i = 0; i < it->second; i++) - positive = plus_exprt(positive, t); - else - for(int i = 0; i > it->second; i--) - negative = plus_exprt(negative, t); - //assert(false); - } + assert(it->second == 0); + } + elems.erase(it); + } } @@ -1143,18 +1155,7 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con return qvar; } - if (neg) positive.swap(negative); - - if(negative == index_of_int(0)) - return positive; - else - if(positive == index_of_int(0)) - { - debug() << "return unary_minus_exprt: this probably shouldn't happen" << eom; - return unary_minus_exprt(negative); - } - else - return minus_exprt(positive,negative); + return sum_of_map(elems,neg); } @@ -1181,6 +1182,18 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) { } +void string_refinementt::update_index_set(const axiom_vect & string_axioms) { + for (size_t i = 0; i < string_axioms.size(); ++i) { + update_index_set(string_axioms[i]); + } +} + +void string_refinementt::update_index_set(const std::vector & cur) { + for (size_t i = 0; i < cur.size(); ++i) { + update_index_set(cur[i]); + } +} + void string_refinementt::update_index_set(const string_axiomt &axiom) { std::vector bounds; @@ -1195,12 +1208,20 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) const exprt &s = cur.op0(); const exprt &i = cur.op1(); - // if cur is of the form s[i] and qvar does not appear in i... - if(!find_qvar(i,axiom.univ_var)) { + bool has_quant_var = find_qvar(i,axiom.univ_var); + if(!has_quant_var) { + for(int j = 0; j < axiom.exists_var.size(); j++) + has_quant_var = (has_quant_var || find_qvar(i,axiom.exists_var[j])); + } + + // if cur is of the form s[i] and no quantified variable appears in i + if(!has_quant_var){ assert(s.type() == string_type.get_content_type()); expr_sett &idxs = index_set[s]; idxs.insert(bounds.begin(), bounds.end()); idxs.insert(i); + current_index_set[s].insert(bounds.begin(), bounds.end()); + current_index_set[s].insert(i); } } else { forall_operands(it, cur) { @@ -1223,7 +1244,9 @@ void string_refinementt::update_index_set(const exprt &formula) const exprt &s = cur.op0(); const exprt &i = cur.op1(); assert(s.type() == string_type.get_content_type()); - index_set[s].insert(i); + const exprt &simplified = simplify_sum(i); + if(index_set[s].insert(simplified).second) + current_index_set[s].insert(simplified); } else { forall_operands(it, cur) { to_process.push_back(*it); @@ -1270,17 +1293,17 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, exprt idx = find_index(axiom.body,str); // what if idx is qvar or if there are several indexes? if(idx.is_nil()) return string_axiomt(); - //debug() << "string_refinementt::instantiate : replaces " << eom << "occurances of " << pretty_short(axiom.univ_var) << eom << "in " << pretty_short(axiom.premise) << " ===> " << pretty_short(axiom.body) << eom ; - - if(!find_qvar(idx,axiom.univ_var)) { debug() << "! find qvar" << eom; return string_axiomt(); } + if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); - //exprt positive; - //exprt negative; - exprt r = compute_subst(axiom.univ_var, val, idx);//,positive,negative); + exprt r = compute_subst(axiom.univ_var, val, idx); + //debug() << "string_refinementt::instantiate : replaces " << eom << "occurances of " << pretty_short(axiom.univ_var) << eom << "in " << pretty_short(axiom.premise) << " ===> " << pretty_short(axiom.body) << eom ; //debug() << "by " << pretty_short(r) << eom; + exprt premise(axiom.premise); exprt body(axiom.body); + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); for(unsigned i=0; i < axiom.exists_var.size(); i++) { debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables, assume it has to be positive" << eom; @@ -1288,26 +1311,17 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, index_symbols.push_back(fresh_var); add_lemma(is_positive(fresh_var)); add_lemma(binary_relation_exprt(fresh_var,ID_lt,axiom.exists_bounds[i])); - /*if(find_qvar(premise,axiom.exists_var[i])){ + /* + if(find_qvar(premise,axiom.exists_var[i])){ debug() << "warning: existential variable appearing on the premise of axiom : " - << axiom_to_string(axiom) << eom - << "we should probably disregard this lemma." << eom; - debug() << " r = " << pretty_short(r) << eom; + << " r = " << pretty_short(r) << eom; debug() << " str = " << pretty_short(str) << eom; debug() << " val = " << pretty_short(val) << eom; }*/ replace_expr(axiom.exists_var[i],fresh_var,body); - //replace_expr(axiom.exists_var[i],fresh_var,positive); - //replace_expr(axiom.exists_var[i],fresh_var,negative); replace_expr(axiom.exists_var[i],fresh_var,premise); } - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); - //replace_expr(axiom.univ_var, r, positive); - //replace_expr(axiom.univ_var, r, negative); - - //debug() << "Warning: adding condition saying that " << axiom.univ_var.get_identifier() << " is positive" << eom; //return string_axiomt(and_exprt(binary_relation_exprt(positive,ID_ge,negative),premise),body); return string_axiomt(premise,body); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 22d53f461cd..a11e7cfac49 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -279,6 +279,7 @@ class string_refinementt: public bv_refinementt // See the definition in the PASS article // this is indexed by array_expressions + std::map current_index_set; std::map index_set; // Add to the index set all the indices that appear in the formula @@ -306,6 +307,13 @@ class string_refinementt: public bv_refinementt // Takes e minus the sum of the element in elems. // exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); //, exprt & positive, exprt & negative); + + // Rewrite a sum in a simple form: sum m_i * expr_i + std::map< exprt, int> map_of_sum(const exprt &f); + exprt sum_of_map(std::map &m,bool negated=false); + + // Simplify a sum (an expression with only plus and minus expr) + exprt simplify_sum(const exprt &f); // Gets a model of an array and put it in a certain form exprt get_array(const exprt &arr, const exprt &size); From cac8777fe87ea87c009cfab400920b0472f3844e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 22 Aug 2016 19:39:05 +0100 Subject: [PATCH 055/221] giving up for now refinement approach for the index set, which was not working for the contains example --- src/solvers/refinement/string_refinement.cpp | 265 +++++++++++++------ src/solvers/refinement/string_refinement.h | 30 +++ 2 files changed, 211 insertions(+), 84 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ad951279ca5..fb957f1164f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -61,6 +61,17 @@ string_axiomt::string_axiomt(symbol_exprt univ, symbol_exprt evar, exprt bound, { exists_var.push_back(evar); exists_bounds.push_back(bound); + array_typet index_array(index_type,infinity_exprt(index_type)); + existential_instantiation = string_refinementt::fresh_symbol("existential_instantiation",index_array); +} + +exprt string_axiomt::witness(const exprt & qval, std::vector & lemmas) +{ + exprt w = index_exprt(existential_instantiation, qval); + assert(exists_bounds.size() == 1); + lemmas.push_back(binary_relation_exprt(w,ID_lt,exists_bounds[0])); + lemmas.push_back(binary_relation_exprt(w,ID_ge,index_of_int(0))); + return w; } string_axiomt::string_axiomt(exprt prem, exprt bod) @@ -86,9 +97,15 @@ string_axiomt::string_axiomt() + string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { + use_counter_example = false; + witness_bound = 1; + variable_with_multiple_occurence_in_index = false; + initial_loop_bound = 10; + string_literal_func = "__CPROVER_uninterpreted_string_literal"; char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; @@ -246,18 +263,18 @@ void string_exprt::of_string_concat(const function_application_exprt &f, axiom_v equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.push_back(string_axiomt(length_sum_lem)); // We can run into problems if the length of the string exceed 32 bits? - binary_relation_exprt lem1(length(), ID_ge, s1.length()); - axioms.push_back(string_axiomt(lem1)); - binary_relation_exprt lem2(length(), ID_ge, s2.length()); - axioms.push_back(string_axiomt(lem2)); + //binary_relation_exprt lem1(length(), ID_ge, s1.length()); + //axioms.push_back(string_axiomt(lem1)); + //binary_relation_exprt lem2(length(), ID_ge, s2.length()); + //axioms.push_back(string_axiomt(lem2)); - symbol_exprt idx = string_refinementt::fresh_symbol("index_concat", index_type); + symbol_exprt idx = string_refinementt::fresh_symbol("index_concat",index_type); string_axiomt a1(idx, and_exprt(string_refinementt::is_positive(idx),binary_relation_exprt(idx, ID_lt, s1.length())), equal_exprt(s1[idx], index_exprt(content(), idx))); - symbol_exprt idx2 = string_refinementt::fresh_symbol("index_concat2", index_type); + symbol_exprt idx2 = string_refinementt::fresh_symbol("index_concat2",index_type); string_axiomt a2(idx2, and_exprt(string_refinementt::is_positive(idx2),binary_relation_exprt(idx2, ID_lt, s2.length())), equal_exprt(s2[idx2], @@ -346,6 +363,14 @@ void string_refinementt::post_process() // We should check at each step whether the lemmas are satisfiable or not // while(!index_set.empty()) {cur.clear(); add_instantiations(); index_set.clear(); update_index_set(cur); } + while(!current_index_set.empty() && initial_loop_bound-- > 0 && !variable_with_multiple_occurence_in_index) + { + current_index_set.clear(); + update_index_set(cur); + cur.clear(); + add_instantiations(); + } + SUB::post_process(); } @@ -459,20 +484,31 @@ bvt string_refinementt::convert_function_application( return SUB::convert_function_application(expr); } +bool just_checked_axiom = false; + void string_refinementt::check_SAT() { SUB::check_SAT(); + if(!progress){ - if(!check_axioms()) + /* if(just_checked_axiom) { current_index_set.clear(); update_index_set(cur); + if(current_index_set.empty()) + debug() << "inconclusive: the model is not correct but there is nothing to add the index set" << eom; progress=(!current_index_set.empty()); cur.clear(); add_instantiations(); - + just_checked_axiom = false; } + else{*/ + if(!check_axioms()) { + //just_checked_axiom = true; + progress = true; + } else progress = false; } + //} } bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) @@ -495,16 +531,18 @@ void string_refinementt::add_lemma(const exprt &lemma) all_lemmas.insert(lemma); } +void string_refinementt::add_again_lemmas() { + for(expr_sett::iterator it = all_lemmas.begin(); it != all_lemmas.end(); it++) + prop.l_set_to_true(convert(*it)); +} + + void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body) { if (!seen_instances.insert(implies_exprt(prem,body)).second) return; - if(body == true_exprt()) - { - debug() << "add_implies_lemma: tautology" << eom; - return; - } + if(body == true_exprt()) return; // tautology /* satcheck_no_simplifiert sat_check; @@ -700,7 +738,8 @@ bvt string_refinementt::convert_string_contains( symbol_exprt startpos = fresh_index("startpos_contains"); - string_axioms.emplace_back(implies_exprt(contains,and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length()))))); + string_axioms.emplace_back(//implies_exprt(contains, + and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); symbol_exprt qvar = fresh_symbol("QA_contains", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); @@ -711,10 +750,13 @@ bvt string_refinementt::convert_string_contains( // forall startpos. exists witness. (!contains && |s0| >= |s1| && stratpos <= |s0| - |s1|) // ==> witness < |s1| && s1[witness] != s0[startpos+witness] + + + symbol_exprt qstartpos = fresh_symbol("QA_startpos_contains", index_type); symbol_exprt witness = fresh_symbol("QE_witness_not_contains", index_type); exprt shifted = plus_exprt(witness, qstartpos); - string_axioms.emplace_back(is_positive(witness)); + //string_axioms.emplace_back(is_positive(witness)); string_axioms.emplace_back (qstartpos,witness,s1.length(), @@ -822,16 +864,10 @@ bvt string_refinementt::convert_string_char_at( -//////////////////// -// PASS Algorithm // -//////////////////// - - // We compute the index set for all formulas, instantiate the formulas // with the found indexes, and add them as lemmas. void string_refinementt::add_instantiations() { - //debug() << "string_refinementt::add_instantiations" << eom; debug() << "string_refinementt::add_instantiations: " << "going through the current index set:" << eom; for (std::map::iterator i = current_index_set.begin(), @@ -950,7 +986,10 @@ bool string_refinementt::check_axioms() fmodel[elength] = len; fmodel[econtent] = arr; - debug() << it->first << " = " << pretty_short(it->second) << " of length " << pretty_short(len) <<" := " << string_of_array(econtent,len) << eom; + debug() << it->first << " = " << pretty_short(it->second) + << " of length " << pretty_short(len) <<" := " << eom + << pretty_short(get(econtent)) << eom + << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = boolean_symbols.begin(); @@ -972,9 +1011,29 @@ bool string_refinementt::check_axioms() for (size_t i = 0; i < string_axioms.size(); ++i) { const string_axiomt &axiom = string_axioms[i]; - exprt negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); + exprt negaxiom = false_exprt(); + + if(axiom.exists_var.size()>0) { + for(int i = 0; i < witness_bound; i++){ + exprt n = axiom.body; + exprt index = index_of_int(i); + exprt within_bounds = and_exprt(binary_relation_exprt(index,ID_ge,index_of_int(0)), binary_relation_exprt(index,ID_lt,axiom.exists_bounds[0])); + replace_expr(axiom.exists_var[0],index,n); + negaxiom = or_exprt(negaxiom,and_exprt(within_bounds,n)); + } + /* + for(int i = 0; i < witness_bound; i++){ + exprt n = axiom.body; + replace_expr(axiom.exists_var[0],minus_exprt(axiom.exists_bounds[0],index_of_int(i+1)),n); + negaxiom = or_exprt(negaxiom,n); + }*/ + negaxiom = and_exprt(axiom.premise, not_exprt(negaxiom)); + } + else negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); replace_expr(fmodel, negaxiom); + debug() << "negaxiom: " << pretty_short(negaxiom) << eom; + satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); solver << negaxiom; @@ -999,34 +1058,34 @@ bool string_refinementt::check_axioms() } else { debug() << violated.size() << " string axioms can be violated" << eom; - return false; - } - - /* - - std::vector new_axioms(violated.size()); - // Checking if the current solution satisfies the constraints - for (size_t i = 0; i < violated.size(); ++i) { - - new_axioms[i] = string_axioms[violated[i].first]; - debug() << " axiom " << i <<" "<< axiom_to_string(new_axioms[i]) << eom; - const exprt &val = violated[i].second; - const string_axiomt &axiom = string_axioms[violated[i].first]; + if(use_counter_example) { + + std::vector new_axioms(violated.size()); + + // Checking if the current solution satisfies the constraints + for (size_t i = 0; i < violated.size(); ++i) { + + new_axioms[i] = string_axioms[violated[i].first]; + debug() << " axiom " << i <<" "<< axiom_to_string(new_axioms[i]) << eom; + const exprt &val = violated[i].second; + const string_axiomt &axiom = string_axioms[violated[i].first]; + + exprt premise(axiom.premise); + exprt body(axiom.body); + implies_exprt instance(premise, body); + debug() << "warning: we don't eliminate the existential quantifier" << eom; + replace_expr(axiom.univ_var, val, instance); + if (seen_instances.insert(instance).second) { + add_implies_lemma(premise,body); + } else debug() << "instance already seen" << eom; + // TODO - add backwards instantiations + } + } - exprt premise(axiom.premise); - exprt body(axiom.body); - implies_exprt instance(premise, body); - debug() << "warning: we don't eliminate the existential quantifier" << eom; - replace_expr(axiom.univ_var, val, instance); - if (seen_instances.insert(instance).second) { - add_implies_lemma(premise,body); - } else debug() << "instance already seen" << eom; - // TODO - add backwards instantiations + return false; } - string_axioms = new_axioms; - */ } @@ -1103,6 +1162,7 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { else { debug() << "in string_refinementt::sum_of_map:" << " warning: several occurences of the same variable " << eom; + variable_with_multiple_occurence_in_index = true; if(second > 1) for(int i = 0; i < second; i++) sum = plus_exprt(sum, t); @@ -1216,12 +1276,15 @@ void string_refinementt::update_index_set(const string_axiomt &axiom) // if cur is of the form s[i] and no quantified variable appears in i if(!has_quant_var){ - assert(s.type() == string_type.get_content_type()); - expr_sett &idxs = index_set[s]; - idxs.insert(bounds.begin(), bounds.end()); - idxs.insert(i); - current_index_set[s].insert(bounds.begin(), bounds.end()); - current_index_set[s].insert(i); + if(s.type() == string_type.get_content_type()){ + expr_sett &idxs = index_set[s]; + idxs.insert(bounds.begin(), bounds.end()); + idxs.insert(i); + current_index_set[s].insert(bounds.begin(), bounds.end()); + current_index_set[s].insert(i); + } else { + debug() << "update_index_set: index expression of non string" << eom; + } } } else { forall_operands(it, cur) { @@ -1243,10 +1306,13 @@ void string_refinementt::update_index_set(const exprt &formula) if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - assert(s.type() == string_type.get_content_type()); - const exprt &simplified = simplify_sum(i); - if(index_set[s].insert(simplified).second) - current_index_set[s].insert(simplified); + if(s.type() == string_type.get_content_type()){ + const exprt &simplified = simplify_sum(i); + if(index_set[s].insert(simplified).second) + current_index_set[s].insert(simplified); + } else { + debug() << "update_index_set: index expression of non string" << eom; + } } else { forall_operands(it, cur) { to_process.push_back(*it); @@ -1287,43 +1353,74 @@ exprt find_index(const exprt & expr, const exprt & str) { string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, - const exprt &str, const exprt &val) + const exprt &str, const exprt &val) { exprt idx = find_index(axiom.body,str); // what if idx is qvar or if there are several indexes? if(idx.is_nil()) return string_axiomt(); - if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); - - exprt r = compute_subst(axiom.univ_var, val, idx); - //debug() << "string_refinementt::instantiate : replaces " << eom << "occurances of " << pretty_short(axiom.univ_var) << eom << "in " << pretty_short(axiom.premise) << " ===> " << pretty_short(axiom.body) << eom ; - //debug() << "by " << pretty_short(r) << eom; + if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); - exprt premise(axiom.premise); - exprt body(axiom.body); + bool has_exist_var = false; + for(unsigned i=0; i < axiom.exists_var.size(); i++) + if(find_qvar(idx,axiom.exists_var[i])) + has_exist_var = true; + + if (has_exist_var) { + // only support for one existential variable for now: + assert(axiom.exists_var.size() == 1); + // Not true anymore: + // we need to replace QA by r in prem(QA) => exists QE. body(QE,QA) + // we add a fresh variable e and if it equals witness[r] then prem(r) => body(e,r), + // so we add the lemma (e=witness[r] && prem(r)) => body(e,r) + //symbol_exprt sym = string_refinementt::fresh_index("exists_remove"); + //add_lemma(and_exprt(is_positive(sym),binary_relation_exprt(sym,ID_lt,bound))); + // exists_var may appear in r + /* + std::vector lemmas; + exprt witness = axiom.witness(r,lemmas); + for(int i = 0; i < lemmas.size(); i++) { + replace_expr(exists_var, sym, lemmas[i]); + add_lemma(lemmas[i]); + } + debug() << "this may not be correct" << eom; + string_axiomt ax(and_exprt(equal_exprt(sym,witness),premise),body); + */ - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); + exprt exists_var = axiom.exists_var[0]; + exprt bound = axiom.exists_bounds[0]; + exprt r = compute_subst(axiom.univ_var, val, idx); + exprt lemma = false_exprt(); + + for(int i = 0; i < witness_bound; i++){ + exprt premise(axiom.premise); + exprt body(axiom.body); + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); + replace_expr(exists_var, index_of_int(i),premise); + replace_expr(exists_var, index_of_int(i),body); + lemma = or_exprt(lemma,implies_exprt(premise,body)); + } - for(unsigned i=0; i < axiom.exists_var.size(); i++) { - debug() << "string_refinementt::instantiate : generate a fresh variable for existentially quantified variables, assume it has to be positive" << eom; - symbol_exprt fresh_var = fresh_symbol("exists_remove", index_type); - index_symbols.push_back(fresh_var); - add_lemma(is_positive(fresh_var)); - add_lemma(binary_relation_exprt(fresh_var,ID_lt,axiom.exists_bounds[i])); - /* - if(find_qvar(premise,axiom.exists_var[i])){ - debug() << "warning: existential variable appearing on the premise of axiom : " - << " r = " << pretty_short(r) << eom; - debug() << " str = " << pretty_short(str) << eom; - debug() << " val = " << pretty_short(val) << eom; + /*for(int i = 0; i < witness_bound; i++){ + exprt premise(axiom.premise); + exprt body(axiom.body); + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); + replace_expr(exists_var, minus_exprt(bound,index_of_int(i)),premise); + replace_expr(exists_var, minus_exprt(bound,index_of_int(i)),body); + lemma = or_exprt(lemma,implies_exprt(premise,body)); }*/ - replace_expr(axiom.exists_var[i],fresh_var,body); - replace_expr(axiom.exists_var[i],fresh_var,premise); + return string_axiomt(lemma); + } + else { + exprt r = compute_subst(axiom.univ_var, val, idx); + exprt premise(axiom.premise); + exprt body(axiom.body); + replace_expr(axiom.univ_var, r, premise); + replace_expr(axiom.univ_var, r, body); + return string_axiomt(premise,body); } - - //debug() << "Warning: adding condition saying that " << axiom.univ_var.get_identifier() << " is positive" << eom; //return string_axiomt(and_exprt(binary_relation_exprt(positive,ID_ge,negative),premise),body); - return string_axiomt(premise,body); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index a11e7cfac49..dd3e0211d23 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -41,6 +41,7 @@ class string_axiomt exprt premise; exprt body; bool is_quantified; + // Axiom of the form: forall qvar. prem ==> bod string_axiomt(symbol_exprt qvar, exprt prem, exprt bod); @@ -57,6 +58,17 @@ class string_axiomt // True axiom string_axiomt(); + + // Given a value for the universaly quantified variable, gives the corresponding witness + exprt witness(const exprt & qval, std::vector & lemmas); + +private: + // For values of the universal variable we give a symbol for the existential one + // The following symbol as type array + symbol_exprt existential_instantiation; + + +public: // Warning: this assume no premise: inline string_axiomt operator&&(const string_axiomt & a) { assert(premise == true_exprt()); @@ -93,6 +105,8 @@ class string_axiomt assert(premise == true_exprt()); return string_axiomt(not_exprt(body)); } + + }; typedef std::vector axiom_vect; @@ -166,6 +180,15 @@ class string_refinementt: public bv_refinementt string_refinementt(const namespacet &_ns, propt &_prop); ~string_refinementt(); + // Should we use counter examples at each iteration? + bool use_counter_example; + + // Bound on the existential witnesses we use for instantiation + int witness_bound; + + // Number of time we refine the index set before actually launching the solver + int initial_loop_bound; + virtual std::string decision_procedure_text() const { return "string refinement loop with "+prop.solver_text(); } @@ -268,6 +291,8 @@ class string_refinementt: public bv_refinementt literalt convert_rest(const exprt &expr); void add_lemma(const exprt &lemma); + void add_again_lemmas(); + // Check that the precondition is satisfiable before adding a lemma, and that we haven't added it before void add_implies_lemma(const exprt &prem, const exprt &body); @@ -282,6 +307,9 @@ class string_refinementt: public bv_refinementt std::map current_index_set; std::map index_set; + // Tells if there is a index in the index set where the same variable occurs several time. + bool variable_with_multiple_occurence_in_index; + // Add to the index set all the indices that appear in the formula void update_index_set(const exprt &formula); void update_index_set(const std::vector &cur); @@ -293,6 +321,8 @@ class string_refinementt: public bv_refinementt // Computes one index [v1] in which [axiom.idx] appears, takes the // corresponding substitition [r] (obtained with [compute_subst]). // Then substitutes [axiom.idx] with [r] in [axiom]. + // axiom is not constant because we may record some information about + // instantiation of existential variables. string_axiomt instantiate(const string_axiomt &axiom, const exprt &str, const exprt &val); From b81708e3c670d184249bd15f919f54d19888d4bd Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 25 Aug 2016 22:45:47 -0400 Subject: [PATCH 056/221] changing the way string constraints are represented --- regression/strings/cprover-string-hack.h | 2 +- src/solvers/refinement/string_constraint.cpp | 57 +++++ src/solvers/refinement/string_constraint.h | 95 +++++++++ src/solvers/refinement/string_refinement.cpp | 211 ++++++++----------- src/solvers/refinement/string_refinement.h | 100 ++------- 5 files changed, 251 insertions(+), 214 deletions(-) create mode 100644 src/solvers/refinement/string_constraint.cpp create mode 100644 src/solvers/refinement/string_constraint.h diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index febbaf5e0f6..ac2234f598c 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -28,7 +28,7 @@ typedef unsigned char __CPROVER_char; /* return the length of s */ #define __CPROVER_string_length(s) __CPROVER_uninterpreted_strlen(s) -/* extracts the substring between positions i and j */ +/* extracts the substring between positions i and j (j not included) */ #define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_substring(s, i, j) /* test whether p is a prefix of s */ diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp new file mode 100644 index 00000000000..312ead84148 --- /dev/null +++ b/src/solvers/refinement/string_constraint.cpp @@ -0,0 +1,57 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String constraints + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#include + + +exprt string_constraintt::premise() { + if(form == SIMPLE || form == UNIV_QUANT) { + if(id() == ID_implies) + return op0(); + else + return expr_true(); + } + else { + return(*this); + } +} + +exprt string_constraintt::body() { + if(form == SIMPLE || form == UNIV_QUANT) { + if(id() == ID_implies) + return op1(); + else + return(*this); + } else throw "string_constraintt::body() should not be applied to NOT_CONTAINS expression"; +} + +string_constraintt string_constraintt::forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup) +{ + form = UNIV_QUANT; + quantified_variable = univ; + bounds.push_back(bound_inf); + bounds.push_back(bound_sup); +} + +string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, + exprt premise, exprt exists_bound_inf, + exprt exists_bound_sup, exprt s1, exprt s2); +{ + string_constraintt sc(premise); + sc.form = NOT_CONTAINS + sc.bounds.push_back(univ_bound_inf); + sc.bounds.push_back(univ_bound_inf); + sc.bounds.push_back(univ_bound_sup); + sc.bounds.push_back(exists_bound_inf); + sc.bounds.push_back(exists_bound_sup); + sc.compared_strings.push_back(s1); + sc.compared_strings.push_back(s2); + return sc; +} + diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h new file mode 100644 index 00000000000..c93580f121e --- /dev/null +++ b/src/solvers/refinement/string_constraint.h @@ -0,0 +1,95 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String constraints + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#ifndef CPROVER_SOLVER_STRING_CONSTRAINT_H +#define CPROVER_SOLVER_STRING_CONSTRAINT_H + +#include + +class string_constraintt : public exprt +{ +private: + // String axioms can have 3 different forms: + // either a simple expression p, + // or universally quantified expression: forall x in [lb,ub[. p(x) + // or a expression for non containment: + // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[x] + enum {SIMPLE, UNIV_QUANT, NOT_CONTAINS} form; + + // Universally quantified symbol + symbol_exprt quantified_variable; + // Bounds on the quantified variables (alternate between inf and sup) + std::vector bounds; + // Only for NOT_CONTAINS constraints (represent s1 and s2) + std::vector compared_strings; + +public: + // True axiom + string_constraintt() : exprt(true_exprt()) { form = SIMPLE; } + + // Axiom with no quantification, and no premise + string_constraintt(exprt bod) : exprt(bod) { form = SIMPLE; } + + // Axiom with no quantification: prem => bod + string_constraintt(exprt prem, exprt bod) : exprt(implies_exprt(prem,bod)) + { form = SIMPLE; } + + // Add an universal quantifier, assume the premise are empty + string_constraintt forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup); + string_constraintt forall(symbol_exprt univ, exprt bound_sup); + + static string_constraintt not_contains + (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, + exprt exists_bound_inf, exprt exists_bound_sup, exprt s1, exprt s2); + + bool is_simple() { return (form == SIMPLE); }; + bool is_univ_quant() { return (form == UNIV_QUANT); }; + bool is_not_contains() { return (form == NOT_CONTAINS); }; + + exprt premise(); + + exprt body(); + + inline symbol_exprt get_univ_var() { assert(form==UNIV_QUANT); return quantified_variable;} + inline exprt univ_bound_inf(){ return bounds[0]; } + inline exprt univ_bound_sup(){ return bounds[1]; } + inline exprt exists_bound_inf(){ return bounds[2]; } + inline exprt exists_bound_sup(){ return bounds[3]; } + + // Warning: this assumes a simple form + inline string_constraintt operator&&(const exprt & a) { + assert(form == SIMPLE); + return string_constraintt(and_exprt(*this, a)); + } + + inline string_constraintt operator||(const exprt & a) { + assert(form == SIMPLE); + return string_constraintt(or_exprt(*this, a)); + } + + inline string_constraintt operator!() { + assert(form == SIMPLE); + return string_constraintt(not_exprt(*this)); + } + + std::string to_string(std::string *expr_to_string(exprt)) { + if(form == SIMPLE) + return(*expr_to_string(*this)); + else if(form == UNIV_QUANT) + return ("forall " + *expr_to_string(get_univ_var()) + ". (" + + *expr_to_string(*this)); + else + return "forall QA. exists QE s1 != s2 ..."; + } + + +}; + + +#endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index fb957f1164f..020bedfabc6 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -29,6 +29,8 @@ constant_exprt index_of_int(int i) { return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); } +constant_exprt zero = index_of_int(0); + // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { languagest languages(ns, new_ansi_c_language()); @@ -53,47 +55,6 @@ string_ref_typet::string_ref_typet() : struct_typet() { components()[1].type()=char_array; } -string_axiomt::string_axiomt(symbol_exprt qvar, exprt prem, exprt bod) : - univ_var(qvar), premise(prem), body(bod), is_quantified(true) -{} - -string_axiomt::string_axiomt(symbol_exprt univ, symbol_exprt evar, exprt bound, exprt prem, exprt bod) : string_axiomt(univ,prem,bod) -{ - exists_var.push_back(evar); - exists_bounds.push_back(bound); - array_typet index_array(index_type,infinity_exprt(index_type)); - existential_instantiation = string_refinementt::fresh_symbol("existential_instantiation",index_array); -} - -exprt string_axiomt::witness(const exprt & qval, std::vector & lemmas) -{ - exprt w = index_exprt(existential_instantiation, qval); - assert(exists_bounds.size() == 1); - lemmas.push_back(binary_relation_exprt(w,ID_lt,exists_bounds[0])); - lemmas.push_back(binary_relation_exprt(w,ID_ge,index_of_int(0))); - return w; -} - -string_axiomt::string_axiomt(exprt prem, exprt bod) -{ - premise = prem; - is_quantified = false; - body = bod; -} - -string_axiomt::string_axiomt(exprt bod) -{ - premise = true_exprt(); - is_quantified = false; - body = bod; -} - -string_axiomt::string_axiomt() -{ - premise = false_exprt(); - body = true_exprt(); - is_quantified = false; -} @@ -102,7 +63,7 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { use_counter_example = false; - witness_bound = 1; + witness_bound = 2; variable_with_multiple_occurence_in_index = false; initial_loop_bound = 10; @@ -202,6 +163,12 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & return s; } +exprt string_exprt::within_bounds(const exprt & idx, const exprt & bound) +{ + return and_exprt(binary_relation_exprt(idx, ID_ge, index_of_int(0)), + binary_relation_exprt(idx, ID_lt, bound)); +} + void string_exprt::of_function_application(const function_application_exprt & expr, axiom_vect & axioms) { const exprt &name = expr.function(); @@ -242,13 +209,13 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); - axioms.push_back(string_axiomt(lemma)); + axioms.emplace_back(lemma); } std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, index_type); - axioms.push_back(string_axiomt(equal_exprt(length(),s_length))); + axioms.emplace_back(equal_exprt(length(),s_length)); } @@ -261,27 +228,24 @@ void string_exprt::of_string_concat(const function_application_exprt &f, axiom_v string_exprt s2 = string_exprt::of_expr(args[1],axioms); equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); - axioms.push_back(string_axiomt(length_sum_lem)); + axioms.emplace_back(length_sum_lem); // We can run into problems if the length of the string exceed 32 bits? //binary_relation_exprt lem1(length(), ID_ge, s1.length()); - //axioms.push_back(string_axiomt(lem1)); + //axioms.push_back(string_constraintt(lem1)); //binary_relation_exprt lem2(length(), ID_ge, s2.length()); - //axioms.push_back(string_axiomt(lem2)); + //axioms.push_back(string_constraintt(lem2)); + + symbol_exprt idx = string_refinementt::fresh_symbol("QA_index_concat",index_type); - symbol_exprt idx = string_refinementt::fresh_symbol("index_concat",index_type); + string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + axioms.push_back(a1.forall(idx, zero, s1.length())); - string_axiomt a1(idx, and_exprt(string_refinementt::is_positive(idx),binary_relation_exprt(idx, ID_lt, s1.length())), - equal_exprt(s1[idx], - index_exprt(content(), idx))); - symbol_exprt idx2 = string_refinementt::fresh_symbol("index_concat2",index_type); + symbol_exprt idx2 = string_refinementt::fresh_symbol("QA_index_concat2",index_type); - string_axiomt a2(idx2, and_exprt(string_refinementt::is_positive(idx2),binary_relation_exprt(idx2, ID_lt, s2.length())), - equal_exprt(s2[idx2], - index_exprt(content(), - plus_exprt(idx2,s1.length())))); - axioms.push_back(a2); - axioms.push_back(a1); + string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); + axioms.push_back(a2.forall(idx2, zero, s2.length())); + } void string_exprt::of_string_substring @@ -291,25 +255,22 @@ void string_exprt::of_string_substring assert(args.size() == 3); // bad args to string substring? string_exprt str = of_expr(args[0],axioms); - typecast_exprt i(args[1], index_type); - typecast_exprt j(args[2], index_type); + exprt i(args[1]); + assert(i.type() == index_type); + exprt j(args[2]); + assert(j.type() == index_type); symbol_exprt idx = string_refinementt::fresh_symbol("index_substring", index_type); + axioms.emplace_back(equal_exprt(length(), minus_exprt(j, i))); + axioms.emplace_back(binary_relation_exprt(i, ID_lt, j)); + axioms.emplace_back(str >= j); + // forall idx < str.length, str[idx] = arg_str[idx+i] - string_axiomt a(idx, - binary_relation_exprt(idx, ID_lt, length()), - equal_exprt(index_exprt(content(),idx), - str[plus_exprt(i, idx)])); - axioms.push_back(a); - - and_exprt lemma1(binary_relation_exprt(i, ID_lt, j), - and_exprt(binary_relation_exprt(j, ID_le, str.length()), - equal_exprt(length(), minus_exprt(j, i)))); - axioms.push_back(string_axiomt(lemma1)); - - binary_relation_exprt lemma2(str.length(), ID_ge, length()); - axioms.push_back(string_axiomt(lemma2)); + string_constraintt a(equal_exprt(index_exprt(content(),idx), + str[plus_exprt(i, idx)])); + + axioms.push_back(a.forall(idx,zero,length())); } void string_exprt::of_string_char_set @@ -322,7 +283,7 @@ void string_exprt::of_string_char_set symbol_exprt c = string_refinementt::fresh_symbol("char", char_type); //THIS HAS NOT BEEN CHECKED: - axioms.push_back(equal_exprt(c,args[2])); + axioms.emplace_back(equal_exprt(c,args[2])); with_exprt sarrnew(str.content(), args[1], c); implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), and_exprt(equal_exprt(content(), @@ -344,12 +305,14 @@ void string_exprt::of_string_char_set void string_refinementt::post_process() { //debug() << "string_refinementt::post_process()" << eom; - std::vector new_axioms; + std::vector new_axioms; for(int i = 0; i < string_axioms.size(); i++) - if(!string_axioms[i].is_quantified) - add_implies_lemma(string_axioms[i].premise,string_axioms[i].body); - else + if(string_axioms[i].is_simple()) + add_implies_lemma(string_axioms[i].premise(),string_axioms[i].body()); + else if(string_axioms[i].is_univ_quant()) new_axioms.push_back(string_axioms[i]); + else + not_contains_axioms.push_back(string_axioms[i]); string_axioms = new_axioms; //add_instantiations(true); @@ -371,6 +334,7 @@ void string_refinementt::post_process() add_instantiations(); } + debug()<< "post_process: " << initial_loop_bound << " steps skipped" << eom; SUB::post_process(); } @@ -505,8 +469,12 @@ void string_refinementt::check_SAT() else{*/ if(!check_axioms()) { //just_checked_axiom = true; - progress = true; - } else progress = false; + //progress = true; + debug() << "check_SAT: warning, got sat but the model is not correct" << eom; + progress = false; + } + else + progress = false; } //} } @@ -544,7 +512,6 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body if(body == true_exprt()) return; // tautology - /* satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); solver << prem; @@ -555,13 +522,16 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body break; case decision_proceduret::D_SATISFIABLE: default: - add_lemma(implies_exprt(prem,body)); + if(prem == true_exprt()) + add_lemma(body); + else + add_lemma(implies_exprt(prem,body)); } - */ + /* if(prem == true_exprt()) add_lemma(body); else - add_lemma(implies_exprt(prem,body)); + add_lemma(implies_exprt(prem,body));*/ } void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) @@ -609,15 +579,14 @@ bvt string_refinementt::convert_string_equal( string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); string_axioms.emplace_back(qvar, - and_exprt(and_exprt(eq, s1 > qvar),is_positive(qvar)), + and_exprt(eq,string_exprt::within_bounds(qvar,s1.length())), equal_exprt(s1[qvar],s2[qvar])); string_axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - and_exprt(s1 > witness, - and_exprt(is_positive(witness), - notequal_exprt(s1[witness],s2[witness]))))); + and_exprt(string_exprt::within_bounds(witness,s1.length()), + notequal_exprt(s1[witness],s2[witness])))); return bv; } @@ -652,7 +621,7 @@ bvt string_refinementt::convert_string_is_prefix( string_axioms.emplace_back(implies_exprt(isprefix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("qvar_isprefix", index_type); + symbol_exprt qvar = fresh_symbol("QA_isprefix", index_type); string_axioms.emplace_back(qvar, and_exprt(isprefix, s0 > qvar), equal_exprt(s0[qvar],s1[qvar])); @@ -675,9 +644,7 @@ bvt string_refinementt::convert_string_is_suffix( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string issuffix? - symbol_exprt issuffix = fresh_symbol("issuffix"); - boolean_symbols.push_back(issuffix); - + symbol_exprt issuffix = fresh_boolean("issuffix"); string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); @@ -690,7 +657,7 @@ bvt string_refinementt::convert_string_is_suffix( string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("qvar_suffix", index_type); + symbol_exprt qvar = fresh_symbol("QA_suffix", index_type); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); string_axioms.emplace_back(qvar, and_exprt(issuffix, s0 > qvar), @@ -762,12 +729,8 @@ bvt string_refinementt::convert_string_contains( (qstartpos,witness,s1.length(), and_exprt(not_exprt(contains), and_exprt(s0 >= s1, - and_exprt( - binary_relation_exprt - (qstartpos,ID_le, - minus_exprt(s0.length(),s1.length())), - is_positive(qstartpos) - ))), + string_exprt::within_bounds(qstartpos, + plus_exprt(index_of_int(1),minus_exprt(s0.length(),s1.length()))))), notequal_exprt(s1[witness],s0[shifted])); @@ -802,13 +765,11 @@ bvt string_refinementt::convert_string_index_of( assert(is_unrefined_char_type(c.type())); // (i = -1 || 0 <= i < s && s[i] = c) && forall n. n < i => s[n] != c - string_axioms.push_back((string_axiomt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); + string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); symbol_exprt n = fresh_symbol("qvar",index_type); - string_axioms.push_back((! string_axiomt::equality(str[n],c)) - .forall(n,index)); - + string_axioms.push_back((! string_constraintt(equal_exprt(str[n],c))).forall(n,index)); bvt bv = convert_bv(index); return bv; @@ -886,13 +847,11 @@ void string_refinementt::add_instantiations() const exprt &val = *j; for (size_t k = 0; k < string_axioms.size(); ++k) { - if(string_axioms[k].is_quantified) { - string_axiomt lemma = instantiate(string_axioms[k], s, val); - assert(!lemma.is_quantified); - add_implies_lemma(lemma.premise,lemma.body); - } + assert(string_axioms[k].is_univ_quant()); + string_constraintt lemma = instantiate(string_axioms[k], s, val); + assert(lemma.is_simple()); + add_implies_lemma(lemma.premise(),lemma.body()); } - } } } @@ -1009,24 +968,25 @@ bool string_refinementt::check_axioms() debug() << "there are " << string_axioms.size() << " string axioms" << eom; for (size_t i = 0; i < string_axioms.size(); ++i) { - const string_axiomt &axiom = string_axioms[i]; + const string_constraintt &axiom = string_axioms[i]; exprt negaxiom = false_exprt(); if(axiom.exists_var.size()>0) { - for(int i = 0; i < witness_bound; i++){ + for(int i = 0; i < witness_bound + 1; i++){ exprt n = axiom.body; exprt index = index_of_int(i); exprt within_bounds = and_exprt(binary_relation_exprt(index,ID_ge,index_of_int(0)), binary_relation_exprt(index,ID_lt,axiom.exists_bounds[0])); replace_expr(axiom.exists_var[0],index,n); negaxiom = or_exprt(negaxiom,and_exprt(within_bounds,n)); } - /* + for(int i = 0; i < witness_bound; i++){ exprt n = axiom.body; replace_expr(axiom.exists_var[0],minus_exprt(axiom.exists_bounds[0],index_of_int(i+1)),n); negaxiom = or_exprt(negaxiom,n); - }*/ + } + negaxiom = and_exprt(axiom.premise, not_exprt(negaxiom)); } else negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); @@ -1061,7 +1021,7 @@ bool string_refinementt::check_axioms() if(use_counter_example) { - std::vector new_axioms(violated.size()); + std::vector new_axioms(violated.size()); // Checking if the current solution satisfies the constraints for (size_t i = 0; i < violated.size(); ++i) { @@ -1069,7 +1029,7 @@ bool string_refinementt::check_axioms() new_axioms[i] = string_axioms[violated[i].first]; debug() << " axiom " << i <<" "<< axiom_to_string(new_axioms[i]) << eom; const exprt &val = violated[i].second; - const string_axiomt &axiom = string_axioms[violated[i].first]; + const string_constraintt &axiom = string_axioms[violated[i].first]; exprt premise(axiom.premise); exprt body(axiom.body); @@ -1254,7 +1214,7 @@ void string_refinementt::update_index_set(const std::vector & cur) { } } -void string_refinementt::update_index_set(const string_axiomt &axiom) +void string_refinementt::update_index_set(const string_constraintt &axiom) { std::vector bounds; get_bounds(axiom.univ_var, axiom.premise, bounds); @@ -1352,14 +1312,14 @@ exprt find_index(const exprt & expr, const exprt & str) { -string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, +string_constraintt string_refinementt::instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val) { exprt idx = find_index(axiom.body,str); // what if idx is qvar or if there are several indexes? - if(idx.is_nil()) return string_axiomt(); - if(!find_qvar(idx,axiom.univ_var)) return string_axiomt(); + if(idx.is_nil()) return string_constraintt(); + if(!find_qvar(idx,axiom.univ_var)) return string_constraintt(); bool has_exist_var = false; for(unsigned i=0; i < axiom.exists_var.size(); i++) @@ -1384,7 +1344,7 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, add_lemma(lemmas[i]); } debug() << "this may not be correct" << eom; - string_axiomt ax(and_exprt(equal_exprt(sym,witness),premise),body); + string_constraintt ax(and_exprt(equal_exprt(sym,witness),premise),body); */ exprt exists_var = axiom.exists_var[0]; @@ -1395,11 +1355,12 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, for(int i = 0; i < witness_bound; i++){ exprt premise(axiom.premise); exprt body(axiom.body); + exprt index = index_of_int(i); replace_expr(axiom.univ_var, r, premise); replace_expr(axiom.univ_var, r, body); - replace_expr(exists_var, index_of_int(i),premise); - replace_expr(exists_var, index_of_int(i),body); - lemma = or_exprt(lemma,implies_exprt(premise,body)); + replace_expr(exists_var, index,premise); + replace_expr(exists_var, index,body); + lemma = or_exprt(lemma,and_exprt(string_exprt::within_bounds(index,bound),implies_exprt(premise,body))); } /*for(int i = 0; i < witness_bound; i++){ @@ -1411,7 +1372,7 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, replace_expr(exists_var, minus_exprt(bound,index_of_int(i)),body); lemma = or_exprt(lemma,implies_exprt(premise,body)); }*/ - return string_axiomt(lemma); + return string_constraintt(lemma); } else { exprt r = compute_subst(axiom.univ_var, val, idx); @@ -1419,7 +1380,7 @@ string_axiomt string_refinementt::instantiate(const string_axiomt &axiom, exprt body(axiom.body); replace_expr(axiom.univ_var, r, premise); replace_expr(axiom.univ_var, r, body); - return string_axiomt(premise,body); + return string_constraintt(premise,body); } } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index dd3e0211d23..091b688a1ff 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -13,6 +13,7 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include +#include #define INDEX_WIDTH 32 #define CHAR_WIDTH 8 @@ -30,86 +31,8 @@ class string_ref_typet : public struct_typet { }; -class string_axiomt -{ -public: - // Universally quantified symbol - symbol_exprt univ_var; - // Existentially quantified symbol - std::vector exists_var; - std::vector exists_bounds; - exprt premise; - exprt body; - bool is_quantified; - - - // Axiom of the form: forall qvar. prem ==> bod - string_axiomt(symbol_exprt qvar, exprt prem, exprt bod); - - // Axiom of the form: forall univ. prem ==> exists evar < b. bod - string_axiomt(symbol_exprt univ, symbol_exprt evar, exprt bound, exprt prem, exprt bod); - - // Axiom with no quantification - string_axiomt(exprt prem, exprt bod); - - // Axiom with no quantification, and no premise - string_axiomt(exprt bod); - - // True axiom - string_axiomt(); - - // Given a value for the universaly quantified variable, gives the corresponding witness - exprt witness(const exprt & qval, std::vector & lemmas); - -private: - // For values of the universal variable we give a symbol for the existential one - // The following symbol as type array - symbol_exprt existential_instantiation; - - -public: - // Warning: this assume no premise: - inline string_axiomt operator&&(const string_axiomt & a) { - assert(premise == true_exprt()); - return string_axiomt(and_exprt(this->body, a.body)); - } - - inline string_axiomt operator&&(const exprt & a) { - assert(premise == true_exprt()); - return string_axiomt(and_exprt(this->body, a)); - } - - // Warning: this assume no premise: - inline string_axiomt operator||(const string_axiomt & a) { - assert(premise == true_exprt()); - return string_axiomt(or_exprt(this->body, a.body)); - } - - inline string_axiomt operator||(const exprt & a) { - assert(premise == true_exprt()); - return string_axiomt(or_exprt(this->body, a)); - } - - // Add an universal quantifier, assume the premise are empty - inline string_axiomt forall(symbol_exprt univ, exprt bound) { - assert(premise == true_exprt()); - return string_axiomt(univ,binary_relation_exprt(univ,ID_lt,bound), body); - } - - inline static string_axiomt equality(const exprt & a, const exprt &b) { - return string_axiomt(equal_exprt(a,b)); - } - - inline string_axiomt operator!() { - assert(premise == true_exprt()); - return string_axiomt(not_exprt(body)); - } - - -}; - -typedef std::vector axiom_vect; +typedef std::vector axiom_vect; // Expressions that encode strings class string_exprt : public struct_exprt { @@ -129,6 +52,8 @@ class string_exprt : public struct_exprt { // Expression corresponding to the content (array of characters) of the string inline const exprt & content() const { return op1();}; + static exprt within_bounds(const exprt & idx, const exprt & bound); + // Expression of the character at position idx in the string inline index_exprt operator[] (exprt idx) { return index_exprt(content(), idx);} @@ -146,6 +71,10 @@ class string_exprt : public struct_exprt { { return binary_relation_exprt(length(), ID_lt, rhs); } inline binary_relation_exprt operator> (const exprt & rhs) { return binary_relation_exprt(rhs, ID_lt, length()); } + inline binary_relation_exprt operator>= (const exprt & rhs) + { return binary_relation_exprt(length(), ID_ge, rhs); } + inline binary_relation_exprt operator<= (const exprt & rhs) + { return binary_relation_exprt(length(), ID_le, rhs); } private: // Auxiliary functions for of_expr @@ -202,13 +131,6 @@ class string_refinementt: public bv_refinementt symbol_exprt fresh_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); - inline std::string axiom_to_string(const string_axiomt & ax) { - return ("forall " + pretty_short(ax.univ_var) + ". (" - + pretty_short(ax.premise) + ") ==> " - + (ax.exists_var.size() >= 1 ?("exists "+pretty_short(ax.exists_var[0])+". "):"") - + pretty_short(ax.body)); - } - irep_idt string_literal_func; irep_idt char_literal_func; @@ -275,6 +197,8 @@ class string_refinementt: public bv_refinementt axiom_vect string_axioms; + axiom_vect not_contains_axioms; + int nb_sat_iteration; // Create a new string expression and add the necessary lemma @@ -313,7 +237,7 @@ class string_refinementt: public bv_refinementt // Add to the index set all the indices that appear in the formula void update_index_set(const exprt &formula); void update_index_set(const std::vector &cur); - void update_index_set(const string_axiomt &axiom); + void update_index_set(const string_constraintt &axiom); void update_index_set(const axiom_vect &string_axioms); // Takes an universaly quantified formula [axiom], @@ -323,7 +247,7 @@ class string_refinementt: public bv_refinementt // Then substitutes [axiom.idx] with [r] in [axiom]. // axiom is not constant because we may record some information about // instantiation of existential variables. - string_axiomt instantiate(const string_axiomt &axiom, const exprt &str, + string_constraintt instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val); // For expressions f of a certain form, // From 1624e6ed669c27137024d6c9d7be0262065c9167 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 25 Aug 2016 22:47:04 -0400 Subject: [PATCH 057/221] changing the way string constraints are represented --- src/solvers/refinement/string_refinement.cpp | 23 +------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 020bedfabc6..da6f2dce7ff 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -970,26 +970,7 @@ bool string_refinementt::check_axioms() for (size_t i = 0; i < string_axioms.size(); ++i) { const string_constraintt &axiom = string_axioms[i]; - exprt negaxiom = false_exprt(); - - if(axiom.exists_var.size()>0) { - for(int i = 0; i < witness_bound + 1; i++){ - exprt n = axiom.body; - exprt index = index_of_int(i); - exprt within_bounds = and_exprt(binary_relation_exprt(index,ID_ge,index_of_int(0)), binary_relation_exprt(index,ID_lt,axiom.exists_bounds[0])); - replace_expr(axiom.exists_var[0],index,n); - negaxiom = or_exprt(negaxiom,and_exprt(within_bounds,n)); - } - - for(int i = 0; i < witness_bound; i++){ - exprt n = axiom.body; - replace_expr(axiom.exists_var[0],minus_exprt(axiom.exists_bounds[0],index_of_int(i+1)),n); - negaxiom = or_exprt(negaxiom,n); - } - - negaxiom = and_exprt(axiom.premise, not_exprt(negaxiom)); - } - else negaxiom = and_exprt(axiom.premise, not_exprt(axiom.body)); + exprt negaxiom = and_exprt(axiom.premise(), not_exprt(axiom.body())); replace_expr(fmodel, negaxiom); debug() << "negaxiom: " << pretty_short(negaxiom) << eom; @@ -1000,7 +981,6 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { - //debug() << "satisfiable" << eom; exprt val = solver.get(axiom.univ_var); violated.push_back(std::make_pair(i, val)); } break; @@ -1008,7 +988,6 @@ bool string_refinementt::check_axioms() break; default: throw "failure in checking axiom"; - //expect(false, "failure in checking axiom"); } } From 3f1c02b5ebe1a977d131fa85c5f316df8f556b6a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 26 Aug 2016 00:14:47 -0400 Subject: [PATCH 058/221] changed the way string constraints are represented --- src/solvers/Makefile | 1 + src/solvers/refinement/string_constraint.cpp | 20 ++- src/solvers/refinement/string_constraint.h | 34 ++-- src/solvers/refinement/string_refinement.cpp | 179 ++++++------------- src/solvers/refinement/string_refinement.h | 2 + 5 files changed, 85 insertions(+), 151 deletions(-) diff --git a/src/solvers/Makefile b/src/solvers/Makefile index 44e21ddbff9..c4331770cad 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -119,6 +119,7 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ refinement/bv_refinement_loop.cpp refinement/refine_arithmetic.cpp \ refinement/refine_arrays.cpp \ refinement/string_refinement.cpp \ + refinement/string_constraint.cpp \ miniBDD/miniBDD.cpp INCLUDES= -I .. \ diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 312ead84148..ff779429a44 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -10,19 +10,19 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include -exprt string_constraintt::premise() { +exprt string_constraintt::premise() const { if(form == SIMPLE || form == UNIV_QUANT) { if(id() == ID_implies) return op0(); else - return expr_true(); + return true_exprt(); } else { return(*this); } } -exprt string_constraintt::body() { +exprt string_constraintt::body() const { if(form == SIMPLE || form == UNIV_QUANT) { if(id() == ID_implies) return op1(); @@ -33,18 +33,20 @@ exprt string_constraintt::body() { string_constraintt string_constraintt::forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup) { - form = UNIV_QUANT; - quantified_variable = univ; - bounds.push_back(bound_inf); - bounds.push_back(bound_sup); + string_constraintt sc(*this); + sc.form = UNIV_QUANT; + sc.quantified_variable = univ; + sc.bounds.push_back(bound_inf); + sc.bounds.push_back(bound_sup); + return sc; } string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, - exprt exists_bound_sup, exprt s1, exprt s2); + exprt exists_bound_sup, exprt s1, exprt s2) { string_constraintt sc(premise); - sc.form = NOT_CONTAINS + sc.form = NOT_CONTAINS; sc.bounds.push_back(univ_bound_inf); sc.bounds.push_back(univ_bound_inf); sc.bounds.push_back(univ_bound_sup); diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index c93580f121e..20235f18729 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -11,6 +11,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #define CPROVER_SOLVER_STRING_CONSTRAINT_H #include +#include class string_constraintt : public exprt { @@ -42,25 +43,24 @@ class string_constraintt : public exprt // Add an universal quantifier, assume the premise are empty string_constraintt forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup); - string_constraintt forall(symbol_exprt univ, exprt bound_sup); static string_constraintt not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s1, exprt s2); - bool is_simple() { return (form == SIMPLE); }; - bool is_univ_quant() { return (form == UNIV_QUANT); }; - bool is_not_contains() { return (form == NOT_CONTAINS); }; + bool is_simple() const { return (form == SIMPLE); }; + bool is_univ_quant() const { return (form == UNIV_QUANT); }; + bool is_not_contains() const { return (form == NOT_CONTAINS); }; - exprt premise(); + exprt premise() const; - exprt body(); + exprt body() const; - inline symbol_exprt get_univ_var() { assert(form==UNIV_QUANT); return quantified_variable;} - inline exprt univ_bound_inf(){ return bounds[0]; } - inline exprt univ_bound_sup(){ return bounds[1]; } - inline exprt exists_bound_inf(){ return bounds[2]; } - inline exprt exists_bound_sup(){ return bounds[3]; } + inline symbol_exprt get_univ_var() const { assert(form==UNIV_QUANT); return quantified_variable;} + inline exprt univ_bound_inf() const { return bounds[0]; } + inline exprt univ_bound_sup() const { return bounds[1]; } + inline exprt exists_bound_inf() const { return bounds[2]; } + inline exprt exists_bound_sup() const { return bounds[3]; } // Warning: this assumes a simple form inline string_constraintt operator&&(const exprt & a) { @@ -77,17 +77,7 @@ class string_constraintt : public exprt assert(form == SIMPLE); return string_constraintt(not_exprt(*this)); } - - std::string to_string(std::string *expr_to_string(exprt)) { - if(form == SIMPLE) - return(*expr_to_string(*this)); - else if(form == UNIV_QUANT) - return ("forall " + *expr_to_string(get_univ_var()) + ". (" - + *expr_to_string(*this)); - else - return "forall QA. exists QE s1 != s2 ..."; - } - + }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index da6f2dce7ff..f297816aef0 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -31,13 +31,6 @@ constant_exprt index_of_int(int i) { constant_exprt zero = index_of_int(0); -// Succinct version of pretty() -std::string string_refinementt::pretty_short(const exprt & expr) { - languagest languages(ns, new_ansi_c_language()); - std::string string_value; - languages.from_expr(expr, string_value); - return string_value; -} // associate a string to symbols std::map symbol_to_string; @@ -56,6 +49,23 @@ string_ref_typet::string_ref_typet() : struct_typet() { } +// Succinct version of pretty() +std::string string_refinementt::pretty_short(const exprt & expr) { + languagest languages(ns, new_ansi_c_language()); + std::string string_value; + languages.from_expr(expr, string_value); + return string_value; +} + + +std::string string_refinementt::constraint_to_string(const string_constraintt & sc) { + if(sc.is_simple()) return(pretty_short(sc)); + else if(sc.is_univ_quant()) + return ("forall " + pretty_short(sc.get_univ_var()) + ". (" + + pretty_short(sc)); + else + return "forall QA. exists QE s1 != s2 ..."; +} @@ -139,11 +149,11 @@ void string_exprt::of_if(const if_exprt &expr, axiom_vect & axioms) axioms.emplace_back(implies_exprt(expr.cond(),equal_exprt(length(),t.length()))); symbol_exprt qvar = string_refinementt::fresh_symbol("string_if",index_type); - axioms.emplace_back(qvar,and_exprt(t>qvar,expr.cond()),equal_exprt((*this)[qvar],t[qvar])) + axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,zero,t.length())); ; - axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); + axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); symbol_exprt qvar2 = string_refinementt::fresh_symbol("string_if",index_type); - axioms.emplace_back(qvar2,and_exprt(t>qvar2,expr.cond()),equal_exprt((*this)[qvar],f[qvar])); + axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar],f[qvar])).forall(qvar2,zero,f.length())); } string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & axioms) @@ -578,9 +588,9 @@ bvt string_refinementt::convert_string_equal( string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); - string_axioms.emplace_back(qvar, - and_exprt(eq,string_exprt::within_bounds(qvar,s1.length())), - equal_exprt(s1[qvar],s2[qvar])); + string_axioms.push_back + (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) + ).forall(qvar,zero,s1.length())); string_axioms.emplace_back (not_exprt(eq), @@ -622,8 +632,9 @@ bvt string_refinementt::convert_string_is_prefix( string_axioms.emplace_back(implies_exprt(isprefix, s1 >= s0)); symbol_exprt qvar = fresh_symbol("QA_isprefix", index_type); - string_axioms.emplace_back(qvar, and_exprt(isprefix, s0 > qvar), - equal_exprt(s0[qvar],s1[qvar])); + string_axioms.push_back + (string_constraintt(isprefix, equal_exprt(s0[qvar],s1[qvar]) + ).forall(qvar,zero,s0.length())); symbol_exprt witness = fresh_index("witness_not_isprefix"); @@ -660,8 +671,9 @@ bvt string_refinementt::convert_string_is_suffix( symbol_exprt qvar = fresh_symbol("QA_suffix", index_type); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); - string_axioms.emplace_back(qvar, and_exprt(issuffix, s0 > qvar), - equal_exprt(s0[qvar],s1[qvar_shifted])); + string_axioms.push_back + (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) + ).forall(qvar,zero,s0.length())); symbol_exprt witness = fresh_index("witness_not_suffix"); @@ -710,34 +722,21 @@ bvt string_refinementt::convert_string_contains( symbol_exprt qvar = fresh_symbol("QA_contains", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); - string_axioms.emplace_back(qvar, and_exprt(contains, and_exprt(is_positive(qvar),s1 > qvar)), - equal_exprt(s1[qvar],s0[qvar_shifted])); + string_axioms.push_back + (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) + ).forall(qvar,zero,s1.length())); // We rewrite the axiom for !contains as: - // forall startpos. exists witness. (!contains && |s0| >= |s1| && stratpos <= |s0| - |s1|) - // ==> witness < |s1| && s1[witness] != s0[startpos+witness] - - - - - symbol_exprt qstartpos = fresh_symbol("QA_startpos_contains", index_type); - symbol_exprt witness = fresh_symbol("QE_witness_not_contains", index_type); - exprt shifted = plus_exprt(witness, qstartpos); - //string_axioms.emplace_back(is_positive(witness)); - - string_axioms.emplace_back - (qstartpos,witness,s1.length(), - and_exprt(not_exprt(contains), - and_exprt(s0 >= s1, - string_exprt::within_bounds(qstartpos, - plus_exprt(index_of_int(1),minus_exprt(s0.length(),s1.length()))))), - notequal_exprt(s1[witness],s0[shifted])); + // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) + // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] + string_axioms.push_back + (string_constraintt::not_contains + (zero,plus_exprt(index_of_int(1),minus_exprt(s0.length(),s1.length())), + and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); assert(f.type() == bool_typet()); - bvt bv = convert_bv(contains); - - return bv; + return convert_bv(contains); } @@ -767,9 +766,9 @@ bvt string_refinementt::convert_string_index_of( string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); - symbol_exprt n = fresh_symbol("qvar",index_type); + symbol_exprt n = fresh_symbol("QA_index_of",index_type); - string_axioms.push_back((! string_constraintt(equal_exprt(str[n],c))).forall(n,index)); + string_axioms.push_back((! string_constraintt(equal_exprt(str[n],c))).forall(n,zero,index)); bvt bv = convert_bv(index); return bv; @@ -981,7 +980,7 @@ bool string_refinementt::check_axioms() switch (solver()) { case decision_proceduret::D_SATISFIABLE: { - exprt val = solver.get(axiom.univ_var); + exprt val = solver.get(axiom.get_univ_var()); violated.push_back(std::make_pair(i, val)); } break; case decision_proceduret::D_UNSATISFIABLE: @@ -1006,15 +1005,15 @@ bool string_refinementt::check_axioms() for (size_t i = 0; i < violated.size(); ++i) { new_axioms[i] = string_axioms[violated[i].first]; - debug() << " axiom " << i <<" "<< axiom_to_string(new_axioms[i]) << eom; + debug() << " axiom " << i <<" "<< constraint_to_string(new_axioms[i]) << eom; const exprt &val = violated[i].second; const string_constraintt &axiom = string_axioms[violated[i].first]; - exprt premise(axiom.premise); - exprt body(axiom.body); + exprt premise(axiom.premise()); + exprt body(axiom.body()); implies_exprt instance(premise, body); debug() << "warning: we don't eliminate the existential quantifier" << eom; - replace_expr(axiom.univ_var, val, instance); + replace_expr(axiom.get_univ_var(), val, instance); if (seen_instances.insert(instance).second) { add_implies_lemma(premise,body); } else debug() << "instance already seen" << eom; @@ -1195,11 +1194,13 @@ void string_refinementt::update_index_set(const std::vector & cur) { void string_refinementt::update_index_set(const string_constraintt &axiom) { + debug() << "string_refinementt::update_index_set needs to be rewriten" << eom; + assert(axiom.is_univ_quant()); std::vector bounds; - get_bounds(axiom.univ_var, axiom.premise, bounds); + get_bounds(axiom.get_univ_var(), axiom.premise(), bounds); std::vector to_process; - to_process.push_back(axiom.body); + to_process.push_back(axiom.body()); while (!to_process.empty()) { exprt cur = to_process.back(); to_process.pop_back(); @@ -1207,11 +1208,7 @@ void string_refinementt::update_index_set(const string_constraintt &axiom) const exprt &s = cur.op0(); const exprt &i = cur.op1(); - bool has_quant_var = find_qvar(i,axiom.univ_var); - if(!has_quant_var) { - for(int j = 0; j < axiom.exists_var.size(); j++) - has_quant_var = (has_quant_var || find_qvar(i,axiom.exists_var[j])); - } + bool has_quant_var = find_qvar(i,axiom.get_univ_var()); // if cur is of the form s[i] and no quantified variable appears in i if(!has_quant_var){ @@ -1236,6 +1233,7 @@ void string_refinementt::update_index_set(const string_constraintt &axiom) void string_refinementt::update_index_set(const exprt &formula) { + debug() << "string_refinementt::update_index_set needs to be rewriten" << eom; std::vector to_process; to_process.push_back(formula); @@ -1294,73 +1292,14 @@ exprt find_index(const exprt & expr, const exprt & str) { string_constraintt string_refinementt::instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val) { - - exprt idx = find_index(axiom.body,str); - // what if idx is qvar or if there are several indexes? + assert(axiom.is_univ_quant()); + exprt idx = find_index(axiom.body(),str); if(idx.is_nil()) return string_constraintt(); - if(!find_qvar(idx,axiom.univ_var)) return string_constraintt(); - - bool has_exist_var = false; - for(unsigned i=0; i < axiom.exists_var.size(); i++) - if(find_qvar(idx,axiom.exists_var[i])) - has_exist_var = true; - - if (has_exist_var) { - // only support for one existential variable for now: - assert(axiom.exists_var.size() == 1); - // Not true anymore: - // we need to replace QA by r in prem(QA) => exists QE. body(QE,QA) - // we add a fresh variable e and if it equals witness[r] then prem(r) => body(e,r), - // so we add the lemma (e=witness[r] && prem(r)) => body(e,r) - //symbol_exprt sym = string_refinementt::fresh_index("exists_remove"); - //add_lemma(and_exprt(is_positive(sym),binary_relation_exprt(sym,ID_lt,bound))); - // exists_var may appear in r - /* - std::vector lemmas; - exprt witness = axiom.witness(r,lemmas); - for(int i = 0; i < lemmas.size(); i++) { - replace_expr(exists_var, sym, lemmas[i]); - add_lemma(lemmas[i]); - } - debug() << "this may not be correct" << eom; - string_constraintt ax(and_exprt(equal_exprt(sym,witness),premise),body); - */ - - exprt exists_var = axiom.exists_var[0]; - exprt bound = axiom.exists_bounds[0]; - exprt r = compute_subst(axiom.univ_var, val, idx); - exprt lemma = false_exprt(); - - for(int i = 0; i < witness_bound; i++){ - exprt premise(axiom.premise); - exprt body(axiom.body); - exprt index = index_of_int(i); - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); - replace_expr(exists_var, index,premise); - replace_expr(exists_var, index,body); - lemma = or_exprt(lemma,and_exprt(string_exprt::within_bounds(index,bound),implies_exprt(premise,body))); - } - - /*for(int i = 0; i < witness_bound; i++){ - exprt premise(axiom.premise); - exprt body(axiom.body); - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); - replace_expr(exists_var, minus_exprt(bound,index_of_int(i)),premise); - replace_expr(exists_var, minus_exprt(bound,index_of_int(i)),body); - lemma = or_exprt(lemma,implies_exprt(premise,body)); - }*/ - return string_constraintt(lemma); - } - else { - exprt r = compute_subst(axiom.univ_var, val, idx); - exprt premise(axiom.premise); - exprt body(axiom.body); - replace_expr(axiom.univ_var, r, premise); - replace_expr(axiom.univ_var, r, body); - return string_constraintt(premise,body); - } + if(!find_qvar(idx,axiom.get_univ_var())) return string_constraintt(); + exprt r = compute_subst(axiom.get_univ_var(), val, idx); + exprt instance(axiom); + replace_expr(axiom.get_univ_var(), r, instance); + return string_constraintt(instance); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 091b688a1ff..f80c68d0996 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -285,6 +285,8 @@ class string_refinementt: public bv_refinementt // succinct and pretty way to display an expression std::string pretty_short(const exprt & expr); + std::string constraint_to_string(const string_constraintt & sc); + }; From 04ad43d700d6e89ed1c87cdfdfefd1595e873989 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 29 Aug 2016 11:35:29 +0100 Subject: [PATCH 059/221] structured the code for string refinement in several files --- src/solvers/Makefile | 3 +- src/solvers/refinement/string_constraint.cpp | 10 +- src/solvers/refinement/string_constraint.h | 7 +- src/solvers/refinement/string_refinement.cpp | 286 ++----------------- src/solvers/refinement/string_refinement.h | 108 +------ 5 files changed, 55 insertions(+), 359 deletions(-) diff --git a/src/solvers/Makefile b/src/solvers/Makefile index c4331770cad..4be69345e58 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -118,8 +118,9 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ floatbv/float_utils.cpp floatbv/float_bv.cpp \ refinement/bv_refinement_loop.cpp refinement/refine_arithmetic.cpp \ refinement/refine_arrays.cpp \ - refinement/string_refinement.cpp \ refinement/string_constraint.cpp \ + refinement/string_expr.cpp \ + refinement/string_refinement.cpp \ miniBDD/miniBDD.cpp INCLUDES= -I .. \ diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index ff779429a44..7eceb9dd136 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -31,7 +31,7 @@ exprt string_constraintt::body() const { } else throw "string_constraintt::body() should not be applied to NOT_CONTAINS expression"; } -string_constraintt string_constraintt::forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup) +string_constraintt string_constraintt::forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup) { string_constraintt sc(*this); sc.form = UNIV_QUANT; @@ -57,3 +57,11 @@ string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt return sc; } +string_constraintt string_constraintt::exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) +{ + assert(form == SIMPLE); + return string_constraintt + (and_exprt(*this, + and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), + binary_relation_exprt(exist, ID_lt, bound_sup)))); +} diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 20235f18729..906c8f4d554 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -41,8 +41,11 @@ class string_constraintt : public exprt string_constraintt(exprt prem, exprt bod) : exprt(implies_exprt(prem,bod)) { form = SIMPLE; } - // Add an universal quantifier, assume the premise are empty - string_constraintt forall(symbol_exprt univ, exprt bound_inf, exprt bound_sup); + // Add an universal quantifier + string_constraintt forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup); + + // Bound a variable that is existentially quantified + string_constraintt exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); static string_constraintt not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f297816aef0..76c08c11e85 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -7,12 +7,12 @@ Author: Alberto Griggio, alberto.griggio@gmail.com \*******************************************************************/ -#include #include #include #include #include #include +#include // This is mostly for debugging: @@ -20,35 +20,15 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -// Types used in this refinement -unsignedbv_typet char_type(CHAR_WIDTH); -//unsignedbv_typet index_type(INDEX_WIDTH); -signedbv_typet index_type(INDEX_WIDTH); +unsignedbv_typet char_type = string_ref_typet::char_type(); +signedbv_typet index_type = string_ref_typet::index_type(); constant_exprt index_of_int(int i) { - return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); +return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); } constant_exprt zero = index_of_int(0); - -// associate a string to symbols -std::map symbol_to_string; - -string_ref_typet::string_ref_typet() : struct_typet() { - components().resize(2); - - components()[0].set_name("length"); - components()[0].set_pretty_name("length"); - components()[0].type()=index_type; - - array_typet char_array(char_type,infinity_exprt(index_type)); - components()[1].set_name("content"); - components()[1].set_pretty_name("content"); - components()[1].type()=char_array; -} - - // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { languagest languages(ns, new_ansi_c_language()); @@ -97,213 +77,6 @@ string_refinementt::~string_refinementt() { } -bool string_refinementt::is_unrefined_string_type(const typet &type) -{ - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_string"); - } - return false; -} - -bool string_refinementt::is_unrefined_char_type(const typet &type) -{ -/*if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_char"); - } - return false;*/ - return (type == char_type); -} - -unsigned string_refinementt::next_symbol_id = 1; - -symbol_exprt string_refinementt::fresh_symbol(const irep_idt &prefix, - const typet &tp) -{ - std::ostringstream buf; - buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); - std::string s = buf.str(); - irep_idt name(s.c_str()); - return symbol_exprt(name, tp); -} - -string_exprt::string_exprt() : struct_exprt(string_ref_typet()) -{ - string_ref_typet t; - symbol_exprt length = string_refinementt::fresh_symbol("string_length",index_type); - symbol_exprt content = string_refinementt::fresh_symbol("string_content",t.get_content_type()); - move_to_operands(length,content); -} - -string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ - return symbol_to_string[expr.get_identifier()]; -} - -void string_exprt::of_if(const if_exprt &expr, axiom_vect & axioms) -{ - assert(string_refinementt::is_unrefined_string_type(expr.true_case().type())); - string_exprt t = of_expr(expr.true_case(),axioms); - assert(string_refinementt::is_unrefined_string_type(expr.false_case().type())); - string_exprt f = of_expr(expr.false_case(),axioms); - - axioms.emplace_back(implies_exprt(expr.cond(),equal_exprt(length(),t.length()))); - symbol_exprt qvar = string_refinementt::fresh_symbol("string_if",index_type); - axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,zero,t.length())); -; - axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); - symbol_exprt qvar2 = string_refinementt::fresh_symbol("string_if",index_type); - axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar],f[qvar])).forall(qvar2,zero,f.length())); -} - -string_exprt string_exprt::of_expr(const exprt & unrefined_string, axiom_vect & axioms) -{ - string_exprt s; - if(unrefined_string.id()==ID_function_application) - s.of_function_application(to_function_application_expr(unrefined_string), axioms); - else if(unrefined_string.id()==ID_symbol) - s = find_symbol(to_symbol_expr(unrefined_string)); - else if(unrefined_string.id()==ID_if) - s.of_if(to_if_expr(unrefined_string),axioms); - else - throw ("string_exprt of:\n" + unrefined_string.pretty() - + "\nwhich is not a symbol or a function application"); - - axioms.emplace_back(string_refinementt::is_positive(s.length())); - return s; -} - -exprt string_exprt::within_bounds(const exprt & idx, const exprt & bound) -{ - return and_exprt(binary_relation_exprt(idx, ID_ge, index_of_int(0)), - binary_relation_exprt(idx, ID_lt, bound)); -} - -void string_exprt::of_function_application(const function_application_exprt & expr, axiom_vect & axioms) -{ - const exprt &name = expr.function(); - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - //std::cout << "string_exprt::of_function_application(" - //<< id << ")" << std::endl; - if (id == "__CPROVER_uninterpreted_string_literal") { - return of_string_literal(expr,axioms); - } else if (id == "__CPROVER_uninterpreted_strcat") { - return of_string_concat(expr,axioms); - } else if (id == "__CPROVER_uninterpreted_substring") { - return of_string_substring(expr,axioms); - } else if (id == "__CPROVER_uninterpreted_char_set") { - return of_string_char_set(expr,axioms); - } - } - throw "non string function"; -} - -void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); //bad args to string literal? - const exprt &arg = args[0]; - - assert (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? - - const exprt &s = arg.op0().op0().op0(); - irep_idt sval = to_string_constant(s).get_value(); - - for (std::size_t i = 0; i < sval.size(); ++i) { - std::string idx_binary = integer2binary(i,INDEX_WIDTH); - constant_exprt idx(idx_binary, index_type); - std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); - constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content(), idx), c); - axioms.emplace_back(lemma); - } - - std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, index_type); - - axioms.emplace_back(equal_exprt(length(),s_length)); -} - - -void string_exprt::of_string_concat(const function_application_exprt &f, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string concat - - string_exprt s1 = string_exprt::of_expr(args[0],axioms); - string_exprt s2 = string_exprt::of_expr(args[1],axioms); - - equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); - axioms.emplace_back(length_sum_lem); - // We can run into problems if the length of the string exceed 32 bits? - //binary_relation_exprt lem1(length(), ID_ge, s1.length()); - //axioms.push_back(string_constraintt(lem1)); - //binary_relation_exprt lem2(length(), ID_ge, s2.length()); - //axioms.push_back(string_constraintt(lem2)); - - symbol_exprt idx = string_refinementt::fresh_symbol("QA_index_concat",index_type); - - string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); - axioms.push_back(a1.forall(idx, zero, s1.length())); - - - symbol_exprt idx2 = string_refinementt::fresh_symbol("QA_index_concat2",index_type); - - string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); - axioms.push_back(a2.forall(idx2, zero, s2.length())); - -} - -void string_exprt::of_string_substring -(const function_application_exprt &expr, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); // bad args to string substring? - - string_exprt str = of_expr(args[0],axioms); - exprt i(args[1]); - assert(i.type() == index_type); - exprt j(args[2]); - assert(j.type() == index_type); - - symbol_exprt idx = string_refinementt::fresh_symbol("index_substring", index_type); - - axioms.emplace_back(equal_exprt(length(), minus_exprt(j, i))); - axioms.emplace_back(binary_relation_exprt(i, ID_lt, j)); - axioms.emplace_back(str >= j); - - // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt(index_exprt(content(),idx), - str[plus_exprt(i, idx)])); - - axioms.push_back(a.forall(idx,zero,length())); -} - -void string_exprt::of_string_char_set -(const function_application_exprt &expr,axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); //bad args to string_char_set? - - string_exprt str = of_expr(args[0],axioms); - symbol_exprt c = string_refinementt::fresh_symbol("char", char_type); - - //THIS HAS NOT BEEN CHECKED: - axioms.emplace_back(equal_exprt(c,args[2])); - with_exprt sarrnew(str.content(), args[1], c); - implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), - and_exprt(equal_exprt(content(), - // update_exprt(str.content(), args[1], c)), - sarrnew), - equal_exprt(length(), str.length()))); - axioms.push_back(lemma); - -} - /////////////////////// @@ -371,12 +144,12 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - if(is_unrefined_string_type(type)) { + if(string_ref_typet::is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; } - else if(is_unrefined_char_type(type)) { + else if(string_ref_typet::char_type() == type) { const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); @@ -396,13 +169,13 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; - if (is_unrefined_string_type(type)) { + if (string_ref_typet::is_unrefined_string_type(type)) { //debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality - string_exprt str = string_exprt::find_symbol(to_symbol_expr(expr)); + string_exprt str = string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; - } else if (is_unrefined_char_type(expr.type())) { + } else if (expr.type() == char_type) { bvt bv; bv.resize(CHAR_WIDTH); map.get_literals(identifier, char_type, CHAR_WIDTH, bv); @@ -547,19 +320,17 @@ void string_refinementt::add_implies_lemma(const exprt &prem, const exprt & body void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { if(str.id()==ID_symbol) - symbol_to_string[sym.get_identifier()] = - string_exprt::find_symbol(to_symbol_expr(str)); + assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); else - symbol_to_string[sym.get_identifier()] = - string_exprt::of_expr(str,string_axioms); + assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); } string_exprt string_refinementt::make_string(const exprt & str) { if(str.id()==ID_symbol) - return string_exprt::find_symbol(to_symbol_expr(str)); + return string_of_symbol(to_symbol_expr(str)); else - return string_exprt::of_expr(str,string_axioms); + return string_exprt::of_expr(str,symbol_to_string,string_axioms); } bvt string_refinementt::convert_string_equal( @@ -584,7 +355,7 @@ bvt string_refinementt::convert_string_equal( // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) symbol_exprt witness = fresh_index("witness_unequal"); - symbol_exprt qvar = fresh_symbol("qvar_equal", index_type); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); @@ -595,8 +366,7 @@ bvt string_refinementt::convert_string_equal( string_axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - and_exprt(string_exprt::within_bounds(witness,s1.length()), - notequal_exprt(s1[witness],s2[witness])))); + string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); return bv; } @@ -626,12 +396,10 @@ bvt string_refinementt::convert_string_is_prefix( symbol_exprt isprefix = fresh_boolean("isprefix"); string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); - assert(f.type() == bool_typet()); - bvt bv = convert_bv(isprefix); - string_axioms.emplace_back(implies_exprt(isprefix, s1 >= s0)); + string_axioms.emplace_back(isprefix, s1 >= s0); - symbol_exprt qvar = fresh_symbol("QA_isprefix", index_type); + symbol_exprt qvar = string_exprt::fresh_symbol("QA_isprefix", index_type); string_axioms.push_back (string_constraintt(isprefix, equal_exprt(s0[qvar],s1[qvar]) ).forall(qvar,zero,s0.length())); @@ -645,7 +413,9 @@ bvt string_refinementt::convert_string_is_prefix( notequal_exprt(s0[witness],s1[witness]))); string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),and_exprt(is_positive(witness),s0_notpref_s1))); - return bv; + + assert(f.type() == bool_typet()); + return convert_bv(isprefix); } @@ -668,7 +438,7 @@ bvt string_refinementt::convert_string_is_suffix( string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); - symbol_exprt qvar = fresh_symbol("QA_suffix", index_type); + symbol_exprt qvar = string_exprt::fresh_symbol("QA_suffix", index_type); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); string_axioms.push_back @@ -720,7 +490,7 @@ bvt string_refinementt::convert_string_contains( string_axioms.emplace_back(//implies_exprt(contains, and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - symbol_exprt qvar = fresh_symbol("QA_contains", index_type); + symbol_exprt qvar = string_exprt::fresh_symbol("QA_contains", index_type); exprt qvar_shifted = plus_exprt(qvar, startpos); string_axioms.push_back (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) @@ -741,13 +511,13 @@ bvt string_refinementt::convert_string_contains( symbol_exprt string_refinementt::fresh_index(const irep_idt &prefix){ - symbol_exprt i = fresh_symbol(prefix,index_type); + symbol_exprt i = string_exprt::fresh_symbol(prefix,index_type); index_symbols.push_back(i); return i; } symbol_exprt string_refinementt::fresh_boolean(const irep_idt &prefix){ - symbol_exprt b = fresh_symbol(prefix,bool_typet()); + symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); boolean_symbols.push_back(b); return b; } @@ -761,12 +531,12 @@ bvt string_refinementt::convert_string_index_of( symbol_exprt index = fresh_index("index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; - assert(is_unrefined_char_type(c.type())); + assert(c.type() == char_type); // (i = -1 || 0 <= i < s && s[i] = c) && forall n. n < i => s[n] != c string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); - symbol_exprt n = fresh_symbol("QA_index_of",index_type); + symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); string_axioms.push_back((! string_constraintt(equal_exprt(str[n],c))).forall(n,zero,index)); @@ -781,6 +551,7 @@ bvt string_refinementt::convert_string_last_index_of( assert(args.size() == 2); // bad args to string last index of? symbol_exprt index = fresh_index("last_index_of"); + throw "not implemented"; bvt bv = convert_bv(index); return bv; } @@ -817,7 +588,7 @@ bvt string_refinementt::convert_string_char_at( debug() << "in convert_string_char_at: we add the index to the" << " index set" << eom; - symbol_exprt char_sym = fresh_symbol("char",char_type); + symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); return convert_bv(char_sym); } @@ -935,6 +706,7 @@ bool string_refinementt::check_axioms() std::map::iterator it; for (it = symbol_to_string.begin(); it != symbol_to_string.end(); ++it) { + debug() << it->first << " := " << it->second.pretty() << eom; string_exprt refined = it->second; const exprt &econtent = refined.content(); const exprt &elength = refined.length(); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index f80c68d0996..a483ab19394 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -14,94 +14,7 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include - -#define INDEX_WIDTH 32 -#define CHAR_WIDTH 8 - - -// Internal type used for strings -class string_ref_typet : public struct_typet { -public: - string_ref_typet(); - - // Type for the content (list of characters) of a string - inline array_typet get_content_type() - { return to_array_type((to_struct_type(*this)).components()[1].type());} - -}; - - - -typedef std::vector axiom_vect; - -// Expressions that encode strings -class string_exprt : public struct_exprt { -public: - string_exprt(); - - // Add to the list of axioms, lemmas which should hold for the string to be - // equal to the given expression. - static string_exprt of_expr(const exprt & unrefined_string, axiom_vect & axioms); - - // Find the string corresponding to the given symbol if it exists. - // Otherwise a new string is created. - static string_exprt find_symbol(const symbol_exprt &expr); - - // Expression corresponding to the length of the string - inline const exprt & length() const { return op0();}; - // Expression corresponding to the content (array of characters) of the string - inline const exprt & content() const { return op1();}; - - static exprt within_bounds(const exprt & idx, const exprt & bound); - - // Expression of the character at position idx in the string - inline index_exprt operator[] (exprt idx) - { return index_exprt(content(), idx);} - - // Comparison on the length of the strings - inline binary_relation_exprt operator< (string_exprt rhs) - { return binary_relation_exprt(length(), ID_lt, rhs.length()); } - inline binary_relation_exprt operator> (string_exprt rhs) - { return binary_relation_exprt(rhs.length(), ID_lt, length()); } - inline binary_relation_exprt operator<= (string_exprt rhs) - { return binary_relation_exprt(length(), ID_le, rhs.length()); } - inline binary_relation_exprt operator>= (string_exprt rhs) - { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt operator< (const exprt & rhs) - { return binary_relation_exprt(length(), ID_lt, rhs); } - inline binary_relation_exprt operator> (const exprt & rhs) - { return binary_relation_exprt(rhs, ID_lt, length()); } - inline binary_relation_exprt operator>= (const exprt & rhs) - { return binary_relation_exprt(length(), ID_ge, rhs); } - inline binary_relation_exprt operator<= (const exprt & rhs) - { return binary_relation_exprt(length(), ID_le, rhs); } - -private: - // Auxiliary functions for of_expr - void of_function_application(const function_application_exprt &expr, axiom_vect & axioms); - - void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - void of_string_concat(const function_application_exprt &f,axiom_vect &axioms); - void of_string_substring(const function_application_exprt &expr,axiom_vect &axioms); - void of_string_char_set(const function_application_exprt &expr,axiom_vect &axioms); - - void of_if(const if_exprt &expr, axiom_vect & axioms); - - friend inline string_exprt &to_string_expr(exprt &expr) - { - assert(expr.id()==ID_struct); - return static_cast(expr); - } - -}; - -string_exprt &to_string_expr(exprt expr); - -/* -class char_exprt : public exprt { -public: - char_exprt(const exprt & unrefined_char); - };*/ +#include class string_refinementt: public bv_refinementt { @@ -121,17 +34,9 @@ class string_refinementt: public bv_refinementt virtual std::string decision_procedure_text() const { return "string refinement loop with "+prop.solver_text(); } - static bool is_unrefined_string_type(const typet &type); - static bool is_unrefined_char_type(const typet &type); - - // Generate a new symbol of the given type tp with a prefix - static symbol_exprt fresh_symbol(const irep_idt &prefix, - const typet &tp=bool_typet()); - symbol_exprt fresh_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); - irep_idt string_literal_func; irep_idt char_literal_func; irep_idt string_length_func; @@ -157,8 +62,6 @@ class string_refinementt: public bv_refinementt inline size_t get_string_width() { return boolbv_width(string_type);} - static unsigned next_symbol_id; - protected: typedef std::set expr_sett; @@ -195,6 +98,15 @@ class string_refinementt: public bv_refinementt // Symbols used in existential quantifications std::vector index_symbols; + std::map symbol_to_string; + inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ + symbol_to_string[sym.get_identifier()]= expr; + } + + inline string_exprt string_of_symbol(const symbol_exprt & sym){ + return symbol_to_string[sym.get_identifier()]; + } + axiom_vect string_axioms; axiom_vect not_contains_axioms; From 95a4d9e5426a982dc1585cb44c4630a7349098a2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 30 Aug 2016 10:20:09 +0100 Subject: [PATCH 060/221] Completed the algorithm for contains function --- src/solvers/refinement/string_constraint.cpp | 4 +- src/solvers/refinement/string_constraint.h | 16 +- src/solvers/refinement/string_refinement.cpp | 145 +++++++++++++------ src/solvers/refinement/string_refinement.h | 59 ++++---- 4 files changed, 145 insertions(+), 79 deletions(-) diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 7eceb9dd136..22c9f449afb 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -43,7 +43,7 @@ string_constraintt string_constraintt::forall(const symbol_exprt & univ, const e string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, - exprt exists_bound_sup, exprt s1, exprt s2) + exprt exists_bound_sup, exprt s0, exprt s1) { string_constraintt sc(premise); sc.form = NOT_CONTAINS; @@ -52,8 +52,8 @@ string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt sc.bounds.push_back(univ_bound_sup); sc.bounds.push_back(exists_bound_inf); sc.bounds.push_back(exists_bound_sup); + sc.compared_strings.push_back(s0); sc.compared_strings.push_back(s1); - sc.compared_strings.push_back(s2); return sc; } diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 906c8f4d554..c9805f9e2fb 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -20,7 +20,7 @@ class string_constraintt : public exprt // either a simple expression p, // or universally quantified expression: forall x in [lb,ub[. p(x) // or a expression for non containment: - // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[x] + // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[y] enum {SIMPLE, UNIV_QUANT, NOT_CONTAINS} form; // Universally quantified symbol @@ -31,6 +31,11 @@ class string_constraintt : public exprt std::vector compared_strings; public: + +// used to store information about witnesses for not_contains constraints + symbol_exprt witness; + + // True axiom string_constraintt() : exprt(true_exprt()) { form = SIMPLE; } @@ -49,7 +54,7 @@ class string_constraintt : public exprt static string_constraintt not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, - exprt exists_bound_inf, exprt exists_bound_sup, exprt s1, exprt s2); + exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1); bool is_simple() const { return (form == SIMPLE); }; bool is_univ_quant() const { return (form == UNIV_QUANT); }; @@ -59,12 +64,19 @@ class string_constraintt : public exprt exprt body() const; + inline exprt s0() const { assert(is_not_contains()); return compared_strings[0];} + inline exprt s1() const { assert(is_not_contains()); return compared_strings[1];} + + inline symbol_exprt get_univ_var() const { assert(form==UNIV_QUANT); return quantified_variable;} inline exprt univ_bound_inf() const { return bounds[0]; } inline exprt univ_bound_sup() const { return bounds[1]; } inline exprt exists_bound_inf() const { return bounds[2]; } inline exprt exists_bound_sup() const { return bounds[3]; } + inline exprt witness_of(const exprt & univ_val) const { return index_exprt(witness, univ_val); } + + // Warning: this assumes a simple form inline string_constraintt operator&&(const exprt & a) { assert(form == SIMPLE); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 76c08c11e85..d0fb0df37d0 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -83,6 +83,18 @@ string_refinementt::~string_refinementt() // String refinement // /////////////////////// +void string_refinementt::display_index_set() { + for (std::map::iterator i = index_set.begin(), + end = index_set.end(); i != end; ++i) { + const exprt &s = i->first; + debug() << "IS(" << pretty_short(s) << ") == {"; + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) + debug() << pretty_short (*j) << "; "; + debug() << "}" << eom; + } +} // We add instantiations before launching the solver void string_refinementt::post_process() @@ -91,23 +103,24 @@ void string_refinementt::post_process() std::vector new_axioms; for(int i = 0; i < string_axioms.size(); i++) if(string_axioms[i].is_simple()) - add_implies_lemma(string_axioms[i].premise(),string_axioms[i].body()); + add_lemma(string_axioms[i]); else if(string_axioms[i].is_univ_quant()) - new_axioms.push_back(string_axioms[i]); - else + universal_axioms.push_back(string_axioms[i]); + else { + assert(string_axioms[i].is_not_contains()); + string_axioms[i].witness = string_exprt::fresh_symbol + ("not_contains_witness", + array_typet(string_ref_typet::index_type(), + infinity_exprt(string_ref_typet::index_type()))); not_contains_axioms.push_back(string_axioms[i]); - - string_axioms = new_axioms; - //add_instantiations(true); - + } + debug() << not_contains_axioms.size() << " not_contains constraints" << eom; nb_sat_iteration = 0; - update_index_set(string_axioms); + update_index_set(universal_axioms); update_index_set(cur); cur.clear(); add_instantiations(); - // We should check at each step whether the lemmas are satisfiable or not - // while(!index_set.empty()) {cur.clear(); add_instantiations(); index_set.clear(); update_index_set(cur); } while(!current_index_set.empty() && initial_loop_bound-- > 0 && !variable_with_multiple_occurence_in_index) { @@ -116,8 +129,22 @@ void string_refinementt::post_process() cur.clear(); add_instantiations(); } - + debug()<< "post_process: " << initial_loop_bound << " steps skipped" << eom; + + + display_index_set(); + debug()<< "instantiating NOT_CONTAINS constraints" << eom; + for(int i=0; i lemmas; + instantiate_not_contains(not_contains_axioms[i],lemmas); + for(int j=0; j::iterator it; for (it = symbol_to_string.begin(); it != symbol_to_string.end(); ++it) { - debug() << it->first << " := " << it->second.pretty() << eom; string_exprt refined = it->second; const exprt &econtent = refined.content(); const exprt &elength = refined.length(); @@ -737,9 +754,9 @@ bool string_refinementt::check_axioms() debug() << "in check axiom, the model may be incomplete" << eom; std::vector< std::pair > violated; - debug() << "there are " << string_axioms.size() << " string axioms" << eom; - for (size_t i = 0; i < string_axioms.size(); ++i) { - const string_constraintt &axiom = string_axioms[i]; + debug() << "there are " << universal_axioms.size() << " universal axioms" << eom; + for (size_t i = 0; i < universal_axioms.size(); ++i) { + const string_constraintt &axiom = universal_axioms[i]; exprt negaxiom = and_exprt(axiom.premise(), not_exprt(axiom.body())); replace_expr(fmodel, negaxiom); @@ -762,6 +779,15 @@ bool string_refinementt::check_axioms() } } + + debug() << "there are " << not_contains_axioms.size() << " not_contains axioms" << eom; + for (size_t i = 0; i < not_contains_axioms.size(); ++i) { + // We always consider than these aximos can be violated + exprt val = get(not_contains_axioms[i].witness_of(zero)); + violated.push_back(std::make_pair(i, val)); + } + + if (violated.empty()) { debug() << "no violated property" << eom; return true; @@ -776,10 +802,10 @@ bool string_refinementt::check_axioms() // Checking if the current solution satisfies the constraints for (size_t i = 0; i < violated.size(); ++i) { - new_axioms[i] = string_axioms[violated[i].first]; + new_axioms[i] = universal_axioms[violated[i].first]; debug() << " axiom " << i <<" "<< constraint_to_string(new_axioms[i]) << eom; const exprt &val = violated[i].second; - const string_constraintt &axiom = string_axioms[violated[i].first]; + const string_constraintt &axiom = universal_axioms[violated[i].first]; exprt premise(axiom.premise()); exprt body(axiom.body()); @@ -787,7 +813,7 @@ bool string_refinementt::check_axioms() debug() << "warning: we don't eliminate the existential quantifier" << eom; replace_expr(axiom.get_univ_var(), val, instance); if (seen_instances.insert(instance).second) { - add_implies_lemma(premise,body); + add_lemma(instance); } else debug() << "instance already seen" << eom; // TODO - add backwards instantiations } @@ -984,15 +1010,11 @@ void string_refinementt::update_index_set(const string_constraintt &axiom) // if cur is of the form s[i] and no quantified variable appears in i if(!has_quant_var){ - if(s.type() == string_type.get_content_type()){ - expr_sett &idxs = index_set[s]; - idxs.insert(bounds.begin(), bounds.end()); - idxs.insert(i); - current_index_set[s].insert(bounds.begin(), bounds.end()); - current_index_set[s].insert(i); - } else { - debug() << "update_index_set: index expression of non string" << eom; - } + assert(s.type() == string_type.get_content_type()); + current_index_set[s].insert(bounds.begin(), bounds.end()); + current_index_set[s].insert(i); + index_set[s].insert(bounds.begin(), bounds.end()); + index_set[s].insert(i); } } else { forall_operands(it, cur) { @@ -1068,10 +1090,37 @@ string_constraintt string_refinementt::instantiate(const string_constraintt &axi exprt idx = find_index(axiom.body(),str); if(idx.is_nil()) return string_constraintt(); if(!find_qvar(idx,axiom.get_univ_var())) return string_constraintt(); - + exprt r = compute_subst(axiom.get_univ_var(), val, idx); exprt instance(axiom); replace_expr(axiom.get_univ_var(), r, instance); return string_constraintt(instance); } + +void string_refinementt::instantiate_not_contains(const string_constraintt & axiom, std::vector & new_lemmas){ + assert(axiom.is_not_contains()); + exprt s0 = axiom.s0(); + exprt s1 = axiom.s1(); + + debug() << "instantiate not contains " << pretty_short(s0) << " : " << pretty_short(s1) << eom; + expr_sett index_set0 = index_set[to_string_expr(s0).content()]; + expr_sett index_set1 = index_set[to_string_expr(s1).content()]; + + for(expr_sett::iterator it0 = index_set0.begin(); it0 != index_set0.end(); it0++) + for(expr_sett::iterator it1 = index_set1.begin(); it1 != index_set1.end(); it1++) + { + debug() << pretty_short(*it0) << " : " << pretty_short(*it1) << eom; + exprt val = minus_exprt(*it0,*it1); + exprt lemma = implies_exprt(and_exprt(axiom.premise(),equal_exprt(axiom.witness_of(val), *it1)), not_exprt(equal_exprt(to_string_expr(s0)[*it0],to_string_expr(s1)[*it1]))); + new_lemmas.push_back(lemma); + // we put bounds on the witnesses: 0 <= v <= |s0| - |s1| ==> 0 <= v+w[v] < |s0| && 0 <= w[v] < |s1| + exprt witness_bounds = implies_exprt + (and_exprt(binary_relation_exprt(zero,ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), + and_exprt(binary_relation_exprt(zero,ID_le,plus_exprt(val,axiom.witness_of(val))), + and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,axiom.witness_of(val))), + and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,axiom.witness_of(val)), + binary_relation_exprt(zero,ID_le,axiom.witness_of(val)))))); + new_lemmas.push_back(witness_bounds); + } +} diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index a483ab19394..6f2a2f7c19d 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -91,6 +91,18 @@ class string_refinementt: public bv_refinementt bvt convert_string_char_at(const function_application_exprt &f); private: + // All constraints produced by the code + axiom_vect string_axioms; + + // Simple constraints that have been given to the solver + expr_sett seen_instances; + // + axiom_vect universal_axioms; + // + axiom_vect not_contains_axioms; + + int nb_sat_iteration; + // Boolean symbols that are used to know whether the results // of some functions should be true. std::vector boolean_symbols; @@ -98,6 +110,21 @@ class string_refinementt: public bv_refinementt // Symbols used in existential quantifications std::vector index_symbols; + + // Unquantified lemmas that have newly been added + std::vector cur; + + // See the definition in the PASS article + // Warning: this is indexed by array_expressions and not string expressions + std::map current_index_set; + std::map index_set; + + // for debugging + void display_index_set(); + + // Tells if there is a index in the index set where the same variable occurs several time. + bool variable_with_multiple_occurence_in_index; + std::map symbol_to_string; inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ symbol_to_string[sym.get_identifier()]= expr; @@ -107,11 +134,6 @@ class string_refinementt: public bv_refinementt return symbol_to_string[sym.get_identifier()]; } - axiom_vect string_axioms; - - axiom_vect not_contains_axioms; - - int nb_sat_iteration; // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. @@ -121,31 +143,19 @@ class string_refinementt: public bv_refinementt // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); + void add_lemma(const exprt &lemma); + //void set_to(const exprt &expr, bool value); bool boolbv_set_equality_to_true(const equal_exprt &expr); //bool set_equality_to_true(const equal_exprt &expr); literalt convert_rest(const exprt &expr); - void add_lemma(const exprt &lemma); - void add_again_lemmas(); - - // Check that the precondition is satisfiable before adding a lemma, and that we haven't added it before - void add_implies_lemma(const exprt &prem, const exprt &body); - // Instantiate forall constraints with index from the index set void add_instantiations(); // Return true if the current model satisfies all the axioms bool check_axioms(); - // See the definition in the PASS article - // this is indexed by array_expressions - std::map current_index_set; - std::map index_set; - - // Tells if there is a index in the index set where the same variable occurs several time. - bool variable_with_multiple_occurence_in_index; - // Add to the index set all the indices that appear in the formula void update_index_set(const exprt &formula); void update_index_set(const std::vector &cur); @@ -162,6 +172,8 @@ class string_refinementt: public bv_refinementt string_constraintt instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val); + void instantiate_not_contains(const string_constraintt &axiom, std::vector & new_lemmas); + // For expressions f of a certain form, // // returns an expression corresponding to $f^{−1}(val)$.// // i.e. the value that is necessary for qvar for f to // @@ -172,7 +184,6 @@ class string_refinementt: public bv_refinementt // elems different from qvar. // // Takes e minus the sum of the element in elems. // exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); - //, exprt & positive, exprt & negative); // Rewrite a sum in a simple form: sum m_i * expr_i std::map< exprt, int> map_of_sum(const exprt &f); @@ -187,16 +198,10 @@ class string_refinementt: public bv_refinementt // Convert the content of a string to a more readable representation std::string string_of_array(const exprt &arr, const exprt &size); - // Lemmas that were already added - expr_sett seen_instances; - - // Unquantified lemmas that have newly been added - std::vector cur; - expr_sett all_lemmas; - // succinct and pretty way to display an expression std::string pretty_short(const exprt & expr); + // string to display a constraint std::string constraint_to_string(const string_constraintt & sc); From 1eea52dc0c9dbe475ec0efb26ba925aa5ddc9aab Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 30 Aug 2016 10:51:44 +0100 Subject: [PATCH 061/221] Test for the substring function --- src/solvers/refinement/string_refinement.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index d0fb0df37d0..2ab14be477a 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -550,7 +550,7 @@ bvt string_refinementt::convert_string_index_of( string_exprt str = make_string(args[0]); exprt c = args[1]; assert(c.type() == char_type); - // (i = -1 || 0 <= i < s && s[i] = c) && forall n. n < i => s[n] != c + // (i = -1 || 0 <= i < s && s[i] = c) && forall n. 0 < n < i => s[n] != c string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); @@ -569,7 +569,18 @@ bvt string_refinementt::convert_string_last_index_of( assert(args.size() == 2); // bad args to string last index of? symbol_exprt index = fresh_index("last_index_of"); - throw "not implemented"; + string_exprt str = make_string(args[0]); + exprt c = args[1]; + assert(c.type() == char_type); + // (i = -1 || 0 <= i < s && s[i] = c) && forall n. |s| > n > i => s[n] != c + + string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); + + symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); + + string_axioms.push_back(string_constraintt(implies_exprt(not_exprt(equal_exprt(index,index_of_int(-1))),not_exprt(equal_exprt(str[n],c)))).forall(n,index,str.length())); + + bvt bv = convert_bv(index); return bv; } From 23426ce89bcd004705a3e7ed4d496fbfb1b58c33 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 30 Aug 2016 11:26:58 +0100 Subject: [PATCH 062/221] corrected the prefix_of function --- src/solvers/refinement/string_constraint.h | 3 ++ src/solvers/refinement/string_refinement.cpp | 32 ++++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index c9805f9e2fb..07d6e9b55b2 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -71,6 +71,9 @@ class string_constraintt : public exprt inline symbol_exprt get_univ_var() const { assert(form==UNIV_QUANT); return quantified_variable;} inline exprt univ_bound_inf() const { return bounds[0]; } inline exprt univ_bound_sup() const { return bounds[1]; } + inline exprt univ_within_bounds() const + { return and_exprt(binary_relation_exprt(bounds[0],ID_le,get_univ_var()), + binary_relation_exprt(bounds[1],ID_gt,get_univ_var())); } inline exprt exists_bound_inf() const { return bounds[2]; } inline exprt exists_bound_sup() const { return bounds[3]; } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 2ab14be477a..092f308e59f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -547,16 +547,25 @@ bvt string_refinementt::convert_string_index_of( assert(args.size() == 2); // bad args to string index of? symbol_exprt index = fresh_index("index_of"); + symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; assert(c.type() == char_type); - // (i = -1 || 0 <= i < s && s[i] = c) && forall n. 0 < n < i => s[n] != c + // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) + // && forall n. 0 < n < i => s[n] != c - string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); + string_axioms.emplace_back(contains,equal_exprt(str[index],c)); + symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); - string_axioms.push_back((! string_constraintt(equal_exprt(str[n],c))).forall(n,zero,index)); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,zero,index)); + + symbol_exprt m = string_exprt::fresh_symbol("QA_index_of",index_type); + + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); bvt bv = convert_bv(index); return bv; @@ -569,17 +578,20 @@ bvt string_refinementt::convert_string_last_index_of( assert(args.size() == 2); // bad args to string last index of? symbol_exprt index = fresh_index("last_index_of"); + symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; assert(c.type() == char_type); - // (i = -1 || 0 <= i < s && s[i] = c) && forall n. |s| > n > i => s[n] != c - - string_axioms.push_back((string_constraintt(str > index) && is_positive(index)) || equal_exprt(index,index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); + string_axioms.emplace_back(contains,equal_exprt(str[index],c)); + symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,index_of_int(1)),str.length())); - string_axioms.push_back(string_constraintt(implies_exprt(not_exprt(equal_exprt(index,index_of_int(-1))),not_exprt(equal_exprt(str[n],c)))).forall(n,index,str.length())); - + symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); bvt bv = convert_bv(index); return bv; @@ -1105,7 +1117,9 @@ string_constraintt string_refinementt::instantiate(const string_constraintt &axi exprt r = compute_subst(axiom.get_univ_var(), val, idx); exprt instance(axiom); replace_expr(axiom.get_univ_var(), r, instance); - return string_constraintt(instance); + exprt bounds = axiom.univ_within_bounds(); + replace_expr(axiom.get_univ_var(), r, bounds); + return string_constraintt(bounds,instance); } From 4dc1edd740bd03d28b909d18de7544b714940068 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 30 Aug 2016 14:36:16 +0100 Subject: [PATCH 063/221] some missing tests --- regression/strings/test_char_set/test.c | 14 ++ regression/strings/test_char_set/test.desc | 8 + regression/strings/test_contains/test.c | 15 ++ regression/strings/test_contains/test.desc | 9 + regression/strings/test_easychair/test.c | 43 ++++ regression/strings/test_index_of/test.c | 21 ++ regression/strings/test_index_of/test.desc | 10 + regression/strings/test_pass_pc1/test.c | 18 ++ regression/strings/test_prefix/test.c | 15 ++ regression/strings/test_prefix/test.desc | 8 + regression/strings/test_substring/test.c | 15 ++ regression/strings/test_substring/test.desc | 10 + src/solvers/refinement/string_expr.cpp | 230 ++++++++++++++++++++ src/solvers/refinement/string_expr.h | 127 +++++++++++ 14 files changed, 543 insertions(+) create mode 100644 regression/strings/test_char_set/test.c create mode 100644 regression/strings/test_char_set/test.desc create mode 100644 regression/strings/test_contains/test.c create mode 100644 regression/strings/test_contains/test.desc create mode 100644 regression/strings/test_easychair/test.c create mode 100644 regression/strings/test_index_of/test.c create mode 100644 regression/strings/test_index_of/test.desc create mode 100644 regression/strings/test_pass_pc1/test.c create mode 100644 regression/strings/test_prefix/test.c create mode 100644 regression/strings/test_prefix/test.desc create mode 100644 regression/strings/test_substring/test.c create mode 100644 regression/strings/test_substring/test.desc create mode 100644 src/solvers/refinement/string_expr.cpp create mode 100644 src/solvers/refinement/string_expr.h diff --git a/regression/strings/test_char_set/test.c b/regression/strings/test_char_set/test.c new file mode 100644 index 00000000000..973db5b06e5 --- /dev/null +++ b/regression/strings/test_char_set/test.c @@ -0,0 +1,14 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s = __CPROVER_string_literal("abc");; + __CPROVER_char c = __CPROVER_char_literal("p"); + __CPROVER_string t = __CPROVER_char_set(s,1,c);; + + assert(__CPROVER_string_equal(t, __CPROVER_string_literal("apc"))); + assert(__CPROVER_string_equal(t, __CPROVER_string_literal("abc"))); + return 0; +} diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc new file mode 100644 index 00000000000..f0d3cc6ca97 --- /dev/null +++ b/regression/strings/test_char_set/test.desc @@ -0,0 +1,8 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal("apc")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal("abc")): FAILURE$ +-- diff --git a/regression/strings/test_contains/test.c b/regression/strings/test_contains/test.c new file mode 100644 index 00000000000..70480208116 --- /dev/null +++ b/regression/strings/test_contains/test.c @@ -0,0 +1,15 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s1 = __CPROVER_string_literal("a1"); + __CPROVER_string s2 = __CPROVER_string_literal("2b"); + __CPROVER_string t = __CPROVER_string_concat(s1, s2); + + assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("3"))); + assert(__CPROVER_string_contains(t,__CPROVER_string_literal("12"))); + assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("b"))); + return 0; +} diff --git a/regression/strings/test_contains/test.desc b/regression/strings/test_contains/test.desc new file mode 100644 index 00000000000..19f86a5e7d7 --- /dev/null +++ b/regression/strings/test_contains/test.desc @@ -0,0 +1,9 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion.1\] assertion !__CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"3\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"12\")): SUCCESS$ +^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"b\")): FAILURE$ +-- diff --git a/regression/strings/test_easychair/test.c b/regression/strings/test_easychair/test.c new file mode 100644 index 00000000000..5d249225280 --- /dev/null +++ b/regression/strings/test_easychair/test.c @@ -0,0 +1,43 @@ +#include +#include "../cprover-string-hack.h" +#define false 0 +#define true 1 + +int main(){ + //IsEasyChairQuery + __CPROVER_string str; + // (1) check that str contains "/" followed by anything not + // containing "/" and containing "EasyChair" + int lastSlash = __CPROVER_string_last_index_of(str,__CPROVER_char_literal("/")); + if(lastSlash < 0) { + __CPROVER_assert(false,"PC1"); + return false; + } + + __CPROVER_string rest = __CPROVER_string_substring(str,lastSlash + 1, __CPROVER_string_length(str)-1); + + if(! __CPROVER_string_contains(rest,__CPROVER_string_literal("EasyChair"))) { + __CPROVER_assert(false,"PC2"); + return false; + } + + // (2) Check that str starts with "http://" + if(! __CPROVER_string_isprefix(__CPROVER_string_literal("http://"),str)) { + __CPROVER_assert(false,"PC3"); + return false; + } + //(3) Take the string between "http://" and the last "/". + // if it starts with "www." strip the "www." off + __CPROVER_string t = __CPROVER_string_substring(str,__CPROVER_string_length(__CPROVER_string_literal("http://")), lastSlash - __CPROVER_string_length(__CPROVER_string_literal("http://"))); + if(__CPROVER_string_isprefix(__CPROVER_string_literal("www."),t)) + t = __CPROVER_string_substring(t,__CPROVER_string_length(__CPROVER_string_literal("www.")), __CPROVER_string_length(t)-1); + // (4) Check that after stripping we have either "live.com" + // or "google.com" + if (!__CPROVER_string_equal(t,__CPROVER_string_literal("live.com")) && !__CPROVER_string_equal(t,__CPROVER_string_literal( "google.com"))) { + __CPROVER_assert(false,"PC4"); + return false; + } + // s survived all checks + return true; +} + diff --git a/regression/strings/test_index_of/test.c b/regression/strings/test_index_of/test.c new file mode 100644 index 00000000000..40a5f281f8b --- /dev/null +++ b/regression/strings/test_index_of/test.c @@ -0,0 +1,21 @@ +#include +#include "../cprover-string-hack.h" +#define false 0 +#define true 1 + +int main(){ + __CPROVER_string str; + int firstSlash = __CPROVER_string_index_of(str,'/'); + //__CPROVER_char_literal("/")); + int lastSlash = __CPROVER_string_last_index_of(str,__CPROVER_char_literal("/")); + + __CPROVER_assume(__CPROVER_string_equal(str, __CPROVER_string_literal("abc/abc/abc"))); + + assert(firstSlash == 3); + assert(lastSlash == 7); + + assert(firstSlash != 3); + assert(lastSlash != 7); + + return 0; +} diff --git a/regression/strings/test_index_of/test.desc b/regression/strings/test_index_of/test.desc new file mode 100644 index 00000000000..c82c0cf152e --- /dev/null +++ b/regression/strings/test_index_of/test.desc @@ -0,0 +1,10 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +\[main.assertion.1\] assertion firstSlash == 3: SUCCESS +\[main.assertion.2\] assertion lastSlash == 7: SUCCESS +\[main.assertion.3\] assertion firstSlash != 3: FAILURE +\[main.assertion.4\] assertion lastSlash != 7: FAILURE +-- \ No newline at end of file diff --git a/regression/strings/test_pass_pc1/test.c b/regression/strings/test_pass_pc1/test.c new file mode 100644 index 00000000000..95dadef8c1d --- /dev/null +++ b/regression/strings/test_pass_pc1/test.c @@ -0,0 +1,18 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s1,s2; + __CPROVER_string t = __CPROVER_string_concat(s1, s2); + __CPROVER_assume(__CPROVER_string_isprefix(__CPROVER_string_literal("a1"),s1)); + + __CPROVER_assume(__CPROVER_string_contains(s2,__CPROVER_string_literal("12"))); + + __CPROVER_assume(__CPROVER_string_issuffix(__CPROVER_string_literal("cd"),t)); + + assert(__CPROVER_string_length(t) > 3); + assert(__CPROVER_string_length(t) > 4); + return 0; +} diff --git a/regression/strings/test_prefix/test.c b/regression/strings/test_prefix/test.c new file mode 100644 index 00000000000..91f24882ef2 --- /dev/null +++ b/regression/strings/test_prefix/test.c @@ -0,0 +1,15 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + + __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); + + assert(__CPROVER_string_isprefix(__CPROVER_string_literal("pi"),s)); + assert(__CPROVER_string_isprefix(__CPROVER_string_literal("pp"),s)); + + return 0; +} diff --git a/regression/strings/test_prefix/test.desc b/regression/strings/test_prefix/test.desc new file mode 100644 index 00000000000..087ad833169 --- /dev/null +++ b/regression/strings/test_prefix/test.desc @@ -0,0 +1,8 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strprefixof(__CPROVER_uninterpreted_string_literal(\"pi\"), s): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strprefixof(__CPROVER_uninterpreted_string_literal(\"pp\"), s): FAILURE$ +-- diff --git a/regression/strings/test_substring/test.c b/regression/strings/test_substring/test.c new file mode 100644 index 00000000000..d2c26eca01a --- /dev/null +++ b/regression/strings/test_substring/test.c @@ -0,0 +1,15 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s = __CPROVER_string_literal("abcdef"); + __CPROVER_string t = __CPROVER_string_substring(s,2,4); + + assert(__CPROVER_string_equal(t,__CPROVER_string_literal("cd"))); + assert(__CPROVER_string_equal(t,__CPROVER_string_literal("cc"))); + assert(!__CPROVER_string_equal(t,__CPROVER_string_literal("bc"))); + assert(!__CPROVER_string_equal(t,__CPROVER_string_literal("cd"))); + return 0; +} diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc new file mode 100644 index 00000000000..03aa24a235e --- /dev/null +++ b/regression/strings/test_substring/test.desc @@ -0,0 +1,10 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cd\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cc\")): FAILURE$ +^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"bc\")): SUCCESS$ +^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cd\")): FAILURE$ +-- \ No newline at end of file diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp new file mode 100644 index 00000000000..63aa14f16c1 --- /dev/null +++ b/src/solvers/refinement/string_expr.cpp @@ -0,0 +1,230 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String expressions for PASS algorithm + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#include +#include + +string_ref_typet::string_ref_typet() : struct_typet() { + components().resize(2); + components()[0].set_name("length"); + components()[0].set_pretty_name("length"); + components()[0].type()=string_ref_typet::index_type(); + + array_typet char_array(string_ref_typet::char_type(),infinity_exprt(string_ref_typet::index_type())); + components()[1].set_name("content"); + components()[1].set_pretty_name("content"); + components()[1].type()=char_array; +} + +exprt index_zero = string_ref_typet::index_zero(); +unsigned string_exprt::next_symbol_id = 1; + + +symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, + const typet &tp) +{ + std::ostringstream buf; + buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); + std::string s = buf.str(); + irep_idt name(s.c_str()); + return symbol_exprt(name, tp); +} + +bool string_ref_typet::is_unrefined_string_type(const typet &type) +{ + if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return tag == irep_idt("__CPROVER_string"); + } + return false; +} + + +string_exprt::string_exprt() : struct_exprt(string_ref_typet()) +{ + string_ref_typet t; + symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); + symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); + move_to_operands(length,content); +} + +/* +std::map symbol_to_string_exprt; + +std::map string_exprt::symbol_to_string(){ +return symbol_to_string_exprt; +}; + +string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ + return symbol_to_string_exprt[expr.get_identifier()]; +} + +void string_exprt::assign_to_symbol(const symbol_exprt & expr){ +symbol_to_string_exprt[expr.get_identifier()] = *this; +}*/ + +void string_exprt::of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + assert(string_ref_typet::is_unrefined_string_type(expr.true_case().type())); + string_exprt t = of_expr(expr.true_case(),symbol_to_string,axioms); + assert(string_ref_typet::is_unrefined_string_type(expr.false_case().type())); + string_exprt f = of_expr(expr.false_case(),symbol_to_string,axioms); + + axioms.emplace_back(implies_exprt(expr.cond(),equal_exprt(length(),t.length()))); + symbol_exprt qvar = fresh_symbol("string_if",string_ref_typet::index_type()); + axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,index_zero,t.length())); +; + axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); +symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); + axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar],f[qvar])).forall(qvar2,index_zero,f.length())); +} + +string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) +{ + string_exprt s; + if(unrefined_string.id()==ID_function_application) + s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); + else if(unrefined_string.id()==ID_symbol) + s = symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; + else if(unrefined_string.id()==ID_if) + s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); + else + throw ("string_exprt of:\n" + unrefined_string.pretty() + + "\nwhich is not a function application, a symbol of an if expression"); + + axioms.emplace_back(s >= index_zero); + return s; +} + + +void string_exprt::of_function_application(const function_application_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const exprt &name = expr.function(); + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + //std::cout << "string_exprt::of_function_application(" + //<< id << ")" << std::endl; + if (id == "__CPROVER_uninterpreted_string_literal") { + return of_string_literal(expr,axioms); + } else if (id == "__CPROVER_uninterpreted_strcat") { + return of_string_concat(expr,symbol_to_string,axioms); + } else if (id == "__CPROVER_uninterpreted_substring") { + return of_string_substring(expr,symbol_to_string,axioms); + } else if (id == "__CPROVER_uninterpreted_char_set") { + return of_string_char_set(expr,symbol_to_string,axioms); + } + } + throw "non string function"; +} + +void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); //bad args to string literal? + const exprt &arg = args[0]; + + assert (arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? + + const exprt &s = arg.op0().op0().op0(); + irep_idt sval = to_string_constant(s).get_value(); + + for (std::size_t i = 0; i < sval.size(); ++i) { + std::string idx_binary = integer2binary(i,INDEX_WIDTH); + constant_exprt idx(idx_binary, string_ref_typet::index_type()); + std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); + constant_exprt c(sval_binary,string_ref_typet::char_type()); + equal_exprt lemma(index_exprt(content(), idx), c); + axioms.emplace_back(lemma); + } + + std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); + exprt s_length = constant_exprt(s_length_binary, string_ref_typet::index_type()); + + axioms.emplace_back(equal_exprt(length(),s_length)); +} + + +void string_exprt::of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string concat + + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); + + equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); + axioms.emplace_back(length_sum_lem); + // We can run into problems if the length of the string exceed 32 bits? + //binary_relation_exprt lem1(length(), ID_ge, s1.length()); + //axioms.push_back(string_constraintt(lem1)); + //binary_relation_exprt lem2(length(), ID_ge, s2.length()); + //axioms.push_back(string_constraintt(lem2)); + + symbol_exprt idx = fresh_symbol("QA_index_concat",string_ref_typet::index_type()); + + string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + axioms.push_back(a1.forall(idx, index_zero, s1.length())); + + + symbol_exprt idx2 = fresh_symbol("QA_index_concat2",string_ref_typet::index_type()); + + string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); + axioms.push_back(a2.forall(idx2, index_zero, s2.length())); + +} + +void string_exprt::of_string_substring +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); // bad args to string substring? + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt i(args[1]); + assert(i.type() == string_ref_typet::index_type()); + exprt j(args[2]); + assert(j.type() == string_ref_typet::index_type()); + + symbol_exprt idx = fresh_symbol("index_substring", string_ref_typet::index_type()); + + axioms.emplace_back(equal_exprt(length(), minus_exprt(j, i))); + axioms.emplace_back(binary_relation_exprt(i, ID_lt, j)); + axioms.emplace_back(str >= j); + + // forall idx < str.length, str[idx] = arg_str[idx+i] + string_constraintt a(equal_exprt(index_exprt(content(),idx), + str[plus_exprt(i, idx)])); + + axioms.push_back(a.forall(idx,index_zero,length())); +} + +void string_exprt::of_string_char_set +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); //bad args to string_char_set? + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + symbol_exprt c = fresh_symbol("char", string_ref_typet::char_type()); + + //THIS HAS NOT BEEN CHECKED: + axioms.emplace_back(equal_exprt(c,args[2])); + with_exprt sarrnew(str.content(), args[1], c); + implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), + and_exprt(equal_exprt(content(), + // update_exprt(str.content(), args[1], c)), + sarrnew), + equal_exprt(length(), str.length()))); + axioms.push_back(lemma); + +} + diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h new file mode 100644 index 00000000000..b16aecfa0a0 --- /dev/null +++ b/src/solvers/refinement/string_expr.h @@ -0,0 +1,127 @@ +/** -*- C++ -*- *****************************************************\ + +Module: String expressions for PASS algorithm + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#ifndef CPROVER_SOLVER_STRING_EXPR_H +#define CPROVER_SOLVER_STRING_EXPR_H + +#include + +#include +#include + +#define INDEX_WIDTH 32 +#define CHAR_WIDTH 8 + + +// Internal type used for strings +class string_ref_typet : public struct_typet { +public: + string_ref_typet(); + + // Type for the content (list of characters) of a string + inline array_typet get_content_type() + { return to_array_type((to_struct_type(*this)).components()[1].type());} + + // Types used in this refinement + static inline unsignedbv_typet char_type() { return unsignedbv_typet(CHAR_WIDTH);} + //unsignedbv_typet index_type(INDEX_WIDTH); + static inline signedbv_typet index_type() { return signedbv_typet(INDEX_WIDTH);} + + static inline exprt index_zero() { return constant_exprt(integer2binary(0, INDEX_WIDTH), index_type());} + + static bool is_unrefined_string_type(const typet & type); +}; + +typedef std::vector axiom_vect; + +// Expressions that encode strings +class string_exprt : public struct_exprt { +public: + string_exprt(); + + + // Add to the list of axioms, lemmas which should hold for the string to be + // equal to the given expression. + static string_exprt of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms); + + // Generate a new symbol of the given type tp with a prefix + static symbol_exprt fresh_symbol(const irep_idt &prefix, + const typet &tp=bool_typet()); + + + // Expression corresponding to the length of the string + inline const exprt & length() const { return op0();}; + // Expression corresponding to the content (array of characters) of the string + inline const exprt & content() const { return op1();}; + + static exprt within_bounds(const exprt & idx, const exprt & bound); + + // Expression of the character at position idx in the string + inline index_exprt operator[] (exprt idx) + { return index_exprt(content(), idx);} + + // Comparison on the length of the strings + inline binary_relation_exprt operator< (string_exprt rhs) + { return binary_relation_exprt(length(), ID_lt, rhs.length()); } + inline binary_relation_exprt operator> (string_exprt rhs) + { return binary_relation_exprt(rhs.length(), ID_lt, length()); } + inline binary_relation_exprt operator<= (string_exprt rhs) + { return binary_relation_exprt(length(), ID_le, rhs.length()); } + inline binary_relation_exprt operator>= (string_exprt rhs) + { return binary_relation_exprt(length(), ID_ge, rhs.length()); } + inline binary_relation_exprt operator< (const exprt & rhs) + { return binary_relation_exprt(length(), ID_lt, rhs); } + inline binary_relation_exprt operator> (const exprt & rhs) + { return binary_relation_exprt(rhs, ID_lt, length()); } + inline binary_relation_exprt operator>= (const exprt & rhs) + { return binary_relation_exprt(length(), ID_ge, rhs); } + inline binary_relation_exprt operator<= (const exprt & rhs) + { return binary_relation_exprt(length(), ID_le, rhs); } + +private: + // Auxiliary functions for of_expr + void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); + + void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); + void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + + void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); + + static unsigned next_symbol_id; + + friend inline string_exprt &to_string_expr(exprt &expr); + +}; + + +extern inline string_exprt &to_string_expr(exprt &expr){ + assert(expr.id()==ID_struct); + return static_cast(expr); +} + +// The following functions convert different string functions to +// bit vectors and add the corresponding lemmas to a list of +// properties to be checked +bvt convert_string_equal(const function_application_exprt &f); +bvt convert_string_copy(const function_application_exprt &f); +bvt convert_string_length(const function_application_exprt &f); +bvt convert_string_is_prefix(const function_application_exprt &f); +bvt convert_string_is_suffix(const function_application_exprt &f); +bvt convert_string_contains(const function_application_exprt &f); +bvt convert_string_index_of(const function_application_exprt &f); +bvt convert_string_last_index_of(const function_application_exprt &f); +bvt convert_char_literal(const function_application_exprt &f); +bvt convert_string_char_at(const function_application_exprt &f); + + + + +#endif From 4f878c055342c75df570a9a1f137a26089322865 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 30 Aug 2016 14:41:14 +0100 Subject: [PATCH 064/221] removed the copy declarations which we don't really know how to do for now --- regression/strings/cprover-string-hack.h | 3 --- src/solvers/refinement/string_refinement.cpp | 1 - src/solvers/refinement/string_refinement.h | 2 -- 3 files changed, 6 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index ac2234f598c..fe3eb4bd287 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -11,9 +11,6 @@ typedef unsigned char __CPROVER_char; /* string equality */ #define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal(s1, s2) -/* string copy */ -#define __CPROVER_string_copy(dest, src) __CPROVER_uninterpreted_string_copy(dest, src) - /* defines a string literal, e.g. __CPROVER_string_literal("foo") */ #define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal(s) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 092f308e59f..ad8fd97f8c0 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -61,7 +61,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): char_literal_func = "__CPROVER_uninterpreted_char_literal"; string_length_func = "__CPROVER_uninterpreted_strlen"; string_equal_func = "__CPROVER_uninterpreted_string_equal"; - string_copy_func = "__CPROVER_uninterpreted_string_copy"; string_char_at_func = "__CPROVER_uninterpreted_char_at"; string_concat_func = "__CPROVER_uninterpreted_strcat"; string_substring_func = "__CPROVER_uninterpreted_substring"; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 6f2a2f7c19d..4b103743f8e 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -41,7 +41,6 @@ class string_refinementt: public bv_refinementt irep_idt char_literal_func; irep_idt string_length_func; irep_idt string_equal_func; - irep_idt string_copy_func; irep_idt string_char_at_func; irep_idt string_concat_func; irep_idt string_substring_func; @@ -80,7 +79,6 @@ class string_refinementt: public bv_refinementt // bit vectors and add the corresponding lemmas to a list of // properties to be checked bvt convert_string_equal(const function_application_exprt &f); - bvt convert_string_copy(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); bvt convert_string_is_prefix(const function_application_exprt &f); bvt convert_string_is_suffix(const function_application_exprt &f); From 86abfaedc38aa5d0175d4fd6463fd837443bdea2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 6 Sep 2016 10:57:10 +0100 Subject: [PATCH 065/221] Compatibility with java strings --- src/ansi-c/library/java.io.c | 3 + src/cbmc/cbmc_parse_options.cpp | 31 ++++- src/goto-programs/Makefile | 3 +- src/goto-programs/remove_returns.cpp | 1 - src/goto-symex/symex_function_call.cpp | 9 +- src/java_bytecode/java_bytecode_convert.cpp | 10 +- src/solvers/Makefile | 1 + src/solvers/refinement/string_expr.cpp | 104 ++++++++++++--- src/solvers/refinement/string_expr.h | 18 ++- src/solvers/refinement/string_refinement.cpp | 131 ++++++++++++------- src/solvers/refinement/string_refinement.h | 14 -- 11 files changed, 237 insertions(+), 88 deletions(-) diff --git a/src/ansi-c/library/java.io.c b/src/ansi-c/library/java.io.c index 91f0302c45b..11648aa55c8 100644 --- a/src/ansi-c/library/java.io.c +++ b/src/ansi-c/library/java.io.c @@ -6,3 +6,6 @@ int __CPROVER_ID "java::java.io.InputStream.read:()I" (void *) __CPROVER_assume(read_result>=-1 && read_result<=255); return read_result; } + + + diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 3761ce5e038..2f0efecd273 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -22,6 +22,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include +#include #include #include #include @@ -891,6 +892,17 @@ bool cbmc_parse_optionst::process_goto_program( string_instrumentation( symbol_table, get_message_handler(), goto_functions); + + /* + debug() << "adding symbol for strings" << eom; + irep_idt function_char_at_name("java::java.lang.String.charAt:(I)C"); + goto_programt::targett ret = goto_functions.function_map[function_char_at_name].body.add_instruction(); + ret->make_return(); + code_function_callt function_call; + symbol_exprt function("__CPROVER_uninterpreted_string_char_at",void_typet()); + //END_FUNCTION*/ + show_symbol_table(); + // remove function pointers status() << "Removal of function pointers and virtual functions" << eom; remove_function_pointers(symbol_table, goto_functions, @@ -907,16 +919,33 @@ bool cbmc_parse_optionst::process_goto_program( // do partial inlining status() << "Partial Inlining" << eom; goto_partial_inline(goto_functions, ns, ui_message_handler); + + debug() << "After partial inlining:" << eom; goto_functions.output(ns,debug()); debug() << "=================" << eom; + + if(cmdline.isset("pass")) { + status() << "PASS Preprocessing " << eom; + pass_preprocess(symbol_table, goto_functions); + } + + debug() << "After PASS preprocessing:" << eom; goto_functions.output(ns,debug()); debug() << "=================" << eom; + // remove returns, gcc vectors, complex remove_returns(symbol_table, goto_functions); + + //goto_functions.function_map[irep_idt("java::java.lang.String.charAt:(I)C")].clear(); + + debug() << "After remove returns" << eom; + goto_functions.output(ns,debug()); + debug() << "=================" << eom; + remove_vector(symbol_table, goto_functions); remove_complex(symbol_table, goto_functions); // add generic checks status() << "Generic Property Instrumentation" << eom; goto_check(ns, options, goto_functions); - + // ignore default/user-specified initialization // of variables with static lifetime if(cmdline.isset("nondet-static")) diff --git a/src/goto-programs/Makefile b/src/goto-programs/Makefile index 0b0119112f2..145b53d984f 100644 --- a/src/goto-programs/Makefile +++ b/src/goto-programs/Makefile @@ -16,7 +16,8 @@ SRC = goto_convert.cpp goto_convert_function_call.cpp \ remove_returns.cpp osx_fat_reader.cpp remove_complex.cpp \ goto_trace.cpp xml_goto_trace.cpp vcd_goto_trace.cpp \ graphml_goto_trace.cpp remove_virtual_functions.cpp \ - class_hierarchy.cpp show_goto_functions.cpp get_goto_model.cpp + class_hierarchy.cpp show_goto_functions.cpp get_goto_model.cpp \ + pass_preprocess.cpp INCLUDES= -I .. diff --git a/src/goto-programs/remove_returns.cpp b/src/goto-programs/remove_returns.cpp index 4a1320d4731..97afa354db7 100644 --- a/src/goto-programs/remove_returns.cpp +++ b/src/goto-programs/remove_returns.cpp @@ -166,7 +166,6 @@ void remove_returnst::do_function_calls( if(function_call.lhs().is_not_nil()) { exprt rhs; - if(f_it->second.body_available()) { symbol_exprt return_value; diff --git a/src/goto-symex/symex_function_call.cpp b/src/goto-symex/symex_function_call.cpp index 869a9193806..a7f1564adfa 100644 --- a/src/goto-symex/symex_function_call.cpp +++ b/src/goto-symex/symex_function_call.cpp @@ -279,6 +279,8 @@ void goto_symext::symex_function_call_code( // find code in function map + std::cout << "goto_symext::symex_function_call_code(" << identifier << ")" << std::endl; + goto_functionst::function_mapt::const_iterator it= goto_functions.function_map.find(identifier); @@ -318,7 +320,12 @@ void goto_symext::symex_function_call_code( if(!goto_function.body_available()) { no_body(identifier); - + + if(identifier == irep_idt("java::java.lang.String.charAt:(I)C")) + std::cout << "this is string_char_at" << std::endl; + else + std::cout << "this is not string_char_at" << std::endl; + // record the return target.function_return(state.guard.as_expr(), identifier, state.source); diff --git a/src/java_bytecode/java_bytecode_convert.cpp b/src/java_bytecode/java_bytecode_convert.cpp index 6a937e8b91f..4d85129d333 100644 --- a/src/java_bytecode/java_bytecode_convert.cpp +++ b/src/java_bytecode/java_bytecode_convert.cpp @@ -492,7 +492,7 @@ void java_bytecode_convertt::convert( tmp_vars.clear(); method_symbol.value=convert_instructions(m.instructions, code_type); - + // do we have the method symbol already? const auto s_it=symbol_table.symbols.find(method.get_name()); if(s_it!=symbol_table.symbols.end()) @@ -888,6 +888,7 @@ codet java_bytecode_convertt::convert_instructions( // does the function symbol exist? irep_idt id=arg0.get(ID_identifier); + if(symbol_table.symbols.find(id)==symbol_table.symbols.end()) { // no, create stub @@ -910,11 +911,16 @@ codet java_bytecode_convertt::convert_instructions( else { // static binding - call.function()=symbol_exprt(arg0.get(ID_identifier), arg0.type()); + /*if(id == "java::java.lang.String.charAt:(I)C") + call.function()=symbol_exprt("java::__CPROVER_uninterpreted_char_at", arg0.type()); + else*/ + call.function()=symbol_exprt(arg0.get(ID_identifier), arg0.type()); + } call.function().add_source_location()=i_it->source_location; c = call; + } else if(statement=="return") { diff --git a/src/solvers/Makefile b/src/solvers/Makefile index 4be69345e58..de48d8b37eb 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -119,6 +119,7 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ refinement/bv_refinement_loop.cpp refinement/refine_arithmetic.cpp \ refinement/refine_arrays.cpp \ refinement/string_constraint.cpp \ + refinement/string_functions.cpp \ refinement/string_expr.cpp \ refinement/string_refinement.cpp \ miniBDD/miniBDD.cpp diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 63aa14f16c1..7c478dd083d 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -10,6 +10,9 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +// For debuggin +#include + string_ref_typet::string_ref_typet() : struct_typet() { components().resize(2); components()[0].set_name("length"); @@ -22,6 +25,18 @@ string_ref_typet::string_ref_typet() : struct_typet() { components()[1].type()=char_array; } +string_ref_typet::string_ref_typet(unsignedbv_typet char_type) : struct_typet() { + components().resize(2); + components()[0].set_name("length"); + components()[0].set_pretty_name("length"); + components()[0].type()=string_ref_typet::index_type(); + + array_typet char_array(char_type,infinity_exprt(string_ref_typet::index_type())); + components()[1].set_name("content"); + components()[1].set_pretty_name("content"); + components()[1].type()=char_array; +} + exprt index_zero = string_ref_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; @@ -36,15 +51,25 @@ symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -bool string_ref_typet::is_unrefined_string_type(const typet &type) +bool string_ref_typet::is_c_string_type(const typet &type) { if (type.id() == ID_struct) { irep_idt tag = to_struct_type(type).get_tag(); - return tag == irep_idt("__CPROVER_string"); - } - return false; + return (tag == irep_idt("__CPROVER_string")); + } else return false; } +bool string_ref_typet::is_java_string_type(const typet &type) +{ + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_struct) { + irep_idt tag = to_struct_type(subtype).get_tag(); + return (tag == irep_idt("java.lang.String")); + } else return false; + } else return false; +} string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { @@ -54,6 +79,14 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) move_to_operands(length,content); } +string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref_typet()) +{ + string_ref_typet t(char_type); + symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); + symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); + move_to_operands(length,content); +} + /* std::map symbol_to_string_exprt; @@ -88,12 +121,21 @@ symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) { string_exprt s; + if(string_ref_typet::is_java_string_type(unrefined_string.type())) + s = string_exprt(string_ref_typet::java_char_type()); + if(unrefined_string.id()==ID_function_application) s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); else if(unrefined_string.id()==ID_symbol) s = symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; + else if(unrefined_string.id()==ID_address_of) { + assert(unrefined_string.op0().id()==ID_symbol); + s = symbol_to_string[to_symbol_expr(unrefined_string.op0()).get_identifier()]; + } else if(unrefined_string.id()==ID_if) s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); + else if(unrefined_string.id()==ID_struct) + s.of_struct(to_struct_expr(unrefined_string),symbol_to_string,axioms); else throw ("string_exprt of:\n" + unrefined_string.pretty() + "\nwhich is not a function application, a symbol of an if expression"); @@ -103,6 +145,12 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) +{ + // Warning: we do nothing here!!!! + return; +} + void string_exprt::of_function_application(const function_application_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms) { const exprt &name = expr.function(); @@ -110,13 +158,13 @@ void string_exprt::of_function_application(const function_application_exprt & ex const irep_idt &id = to_symbol_expr(name).get_identifier(); //std::cout << "string_exprt::of_function_application(" //<< id << ")" << std::endl; - if (id == "__CPROVER_uninterpreted_string_literal") { + if (is_string_literal_func(id)) { return of_string_literal(expr,axioms); - } else if (id == "__CPROVER_uninterpreted_strcat") { + } else if (is_string_concat_func(id)) { return of_string_concat(expr,symbol_to_string,axioms); - } else if (id == "__CPROVER_uninterpreted_substring") { + } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); - } else if (id == "__CPROVER_uninterpreted_char_set") { + } else if (is_string_char_set_func(id)) { return of_string_char_set(expr,symbol_to_string,axioms); } } @@ -129,23 +177,45 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ assert(args.size() == 1); //bad args to string literal? const exprt &arg = args[0]; - assert (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant); // bad arg to string literal? + irep_idt sval; + int char_width; + unsignedbv_typet char_type; + + if (arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant) { + // C string constant - const exprt &s = arg.op0().op0().op0(); - irep_idt sval = to_string_constant(s).get_value(); + const exprt &s = arg.op0().op0().op0(); + sval = to_string_constant(s).get_value(); + char_width = CHAR_WIDTH; + char_type = string_ref_typet::char_type(); + + } else { + // Java string constant + assert (arg.operands().size() == 1); + assert(string_ref_typet::is_unrefined_string_type(arg.type())); + const exprt &s = arg.op0(); + std::cout << "it seems the value of the string is lost, " + << "we need to recover it from the identifier" << std::endl; + std::string tmp(s.get(ID_identifier).c_str()); + std::string value = tmp.substr(31); + std::cout << "of_string_litteral: " << value << std::endl; + sval = irep_idt(value); + char_width = JAVA_CHAR_WIDTH; + char_type = string_ref_typet::java_char_type(); + } for (std::size_t i = 0; i < sval.size(); ++i) { std::string idx_binary = integer2binary(i,INDEX_WIDTH); constant_exprt idx(idx_binary, string_ref_typet::index_type()); - std::string sval_binary=integer2binary(unsigned(sval[i]), CHAR_WIDTH); - constant_exprt c(sval_binary,string_ref_typet::char_type()); + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); axioms.emplace_back(lemma); } - + std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, string_ref_typet::index_type()); diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index b16aecfa0a0..36f218ee470 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -14,15 +14,19 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +#include #define INDEX_WIDTH 32 #define CHAR_WIDTH 8 +#define JAVA_CHAR_WIDTH 16 // Internal type used for strings class string_ref_typet : public struct_typet { public: + // default is with C type of characters string_ref_typet(); + string_ref_typet(unsignedbv_typet char_type); // Type for the content (list of characters) of a string inline array_typet get_content_type() @@ -30,12 +34,21 @@ class string_ref_typet : public struct_typet { // Types used in this refinement static inline unsignedbv_typet char_type() { return unsignedbv_typet(CHAR_WIDTH);} + + static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(JAVA_CHAR_WIDTH);} + //unsignedbv_typet index_type(INDEX_WIDTH); static inline signedbv_typet index_type() { return signedbv_typet(INDEX_WIDTH);} static inline exprt index_zero() { return constant_exprt(integer2binary(0, INDEX_WIDTH), index_type());} - static bool is_unrefined_string_type(const typet & type); + // For C the unrefined string type is __CPROVER_string, for java it is a + // pointer to a strict with tag java.lang.String + + static bool is_c_string_type(const typet & type); + static bool is_java_string_type(const typet & type); + static inline bool is_unrefined_string_type(const typet & type) + { return (is_c_string_type(type) || is_java_string_type(type)); } }; typedef std::vector axiom_vect; @@ -44,6 +57,7 @@ typedef std::vector axiom_vect; class string_exprt : public struct_exprt { public: string_exprt(); + string_exprt(unsignedbv_typet char_type); // Add to the list of axioms, lemmas which should hold for the string to be @@ -95,6 +109,8 @@ class string_exprt : public struct_exprt { void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); + void of_struct(const struct_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms); + static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ad8fd97f8c0..9587de1b08e 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -22,6 +22,7 @@ Author: Alberto Griggio, alberto.griggio@gmail.com unsignedbv_typet char_type = string_ref_typet::char_type(); signedbv_typet index_type = string_ref_typet::index_type(); +unsignedbv_typet java_char_type = string_ref_typet::java_char_type(); constant_exprt index_of_int(int i) { return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); @@ -48,7 +49,6 @@ std::string string_refinementt::constraint_to_string(const string_constraintt & } - string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { @@ -57,19 +57,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): variable_with_multiple_occurence_in_index = false; initial_loop_bound = 10; - string_literal_func = "__CPROVER_uninterpreted_string_literal"; - char_literal_func = "__CPROVER_uninterpreted_char_literal"; - string_length_func = "__CPROVER_uninterpreted_strlen"; - string_equal_func = "__CPROVER_uninterpreted_string_equal"; - string_char_at_func = "__CPROVER_uninterpreted_char_at"; - string_concat_func = "__CPROVER_uninterpreted_strcat"; - string_substring_func = "__CPROVER_uninterpreted_substring"; - string_is_prefix_func = "__CPROVER_uninterpreted_strprefixof"; - string_is_suffix_func = "__CPROVER_uninterpreted_strsuffixof"; - string_contains_func = "__CPROVER_uninterpreted_strcontains"; - string_char_set_func = "__CPROVER_uninterpreted_char_set"; - string_index_of_func = "__CPROVER_uninterpreted_strindexof"; - string_last_index_of_func = "__CPROVER_uninterpreted_strlastindexof"; } string_refinementt::~string_refinementt() @@ -171,18 +158,37 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type.id()!=ID_bool) { if(string_ref_typet::is_unrefined_string_type(type)) { + debug() << "boolbv_set_equality_to_true found unrefined string" << eom + << expr.pretty() << eom; symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; } - else if(string_ref_typet::char_type() == type) { + else if(type == char_type) { + debug() << "boolbv_set_equality_to_true found char type" << eom + << expr.pretty() << eom; const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); map.set_literals(identifier, char_type, bv1); if(freeze_all) set_frozen(bv1); return false; - } else return SUB::boolbv_set_equality_to_true(expr); + } + else if(type == java_char_type) { + debug() << "boolbv_set_equality_to_true found java char type" << eom + << expr.pretty() << eom; + const bvt &bv1=convert_bv(expr.rhs()); + symbol_exprt sym = to_symbol_expr(expr.lhs()); + const irep_idt &identifier = sym.get_identifier(); + map.set_literals(identifier, java_char_type, bv1); + if(freeze_all) set_frozen(bv1); + return false; + } + else { + debug() << "boolbv_set_equality_to_true non string or char: " << eom + << expr.pretty() << eom; + return SUB::boolbv_set_equality_to_true(expr); + } } return true; @@ -195,8 +201,9 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; + debug() << "string_refinementt::convert_symbol " << identifier << " of type " << type << eom; if (string_ref_typet::is_unrefined_string_type(type)) { - //debug() << "string_refinementt::convert_symbol of unrefined string" << eom; + debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality string_exprt str = string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); @@ -206,6 +213,18 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bv.resize(CHAR_WIDTH); map.get_literals(identifier, char_type, CHAR_WIDTH, bv); + forall_literals(it, bv) + if(it->var_no()>=prop.no_variables() && !it->is_constant()) + { + error() << identifier << eom; + assert(false); + } + return bv; + } else if (expr.type() == java_char_type) { + bvt bv; + bv.resize(JAVA_CHAR_WIDTH); + map.get_literals(identifier, java_char_type, JAVA_CHAR_WIDTH, bv); + forall_literals(it, bv) if(it->var_no()>=prop.no_variables() && !it->is_constant()) { @@ -224,32 +243,32 @@ bvt string_refinementt::convert_function_application( if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - //debug() << "string_refinementt::convert_function_application(" - // << id << ")" << eom; - if (id == string_literal_func - || id == string_concat_func - || id == string_substring_func - || id == string_char_set_func) { + debug() << "string_refinementt::convert_function_application(" + << id << ")" << eom; + if (is_string_literal_func(id) + || is_string_concat_func(id) + || is_string_substring_func(id) + || is_string_char_set_func(id)) { string_exprt str = make_string(expr); bvt bv = convert_bv(str); return bv; - } else if (id == char_literal_func) { + } else if (is_char_literal_func(id)) { return convert_char_literal(expr); - } else if (id == string_length_func) { + } else if (is_string_length_func(id)) { return convert_string_length(expr); - } else if (id == string_equal_func) { + } else if (is_string_equal_func(id)) { return convert_string_equal(expr); - } else if (id == string_char_at_func) { + } else if (is_string_char_at_func(id)) { return convert_string_char_at(expr); - } else if (id == string_is_prefix_func) { + } else if (is_string_is_prefix_func(id)) { return convert_string_is_prefix(expr); - } else if (id == string_is_suffix_func) { + } else if (is_string_is_suffix_func(id)) { return convert_string_is_suffix(expr); - } else if (id == string_contains_func) { + } else if (is_string_contains_func(id)) { return convert_string_contains(expr); - } else if (id == string_index_of_func) { + } else if (is_string_index_of_func(id)) { return convert_string_index_of(expr); - } else if (id == string_last_index_of_func) { + } else if (is_string_last_index_of_func(id)) { return convert_string_last_index_of(expr); } } @@ -549,7 +568,7 @@ bvt string_refinementt::convert_string_index_of( symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; - assert(c.type() == char_type); + assert(c.type() == char_type || c.type() == java_char_type); // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) // && forall n. 0 < n < i => s[n] != c @@ -580,7 +599,7 @@ bvt string_refinementt::convert_string_last_index_of( symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; - assert(c.type() == char_type); + assert(c.type() == char_type || c.type() == java_char_type); string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); @@ -603,19 +622,24 @@ bvt string_refinementt::convert_char_literal( assert(args.size() == 1); // there should be exactly 1 argument to char literal const exprt &arg = args[0]; - // argument to char literal should be one string constant of size one - assert(arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant); - - const string_constantt s = to_string_constant(arg.op0().op0().op0()); - irep_idt sval = s.get_value(); - assert(sval.size() == 1); - - std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); - - return convert_bv(constant_exprt(binary, char_type)); + // for C programs argument to char literal should be one string constant of size one + if(arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant) + { + const string_constantt s = to_string_constant(arg.op0().op0().op0()); + irep_idt sval = s.get_value(); + assert(sval.size() == 1); + + std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); + + return convert_bv(constant_exprt(binary, char_type)); + } + else { + throw "convert_char_literal unimplemented"; + } + } @@ -628,9 +652,16 @@ bvt string_refinementt::convert_string_char_at( debug() << "in convert_string_char_at: we add the index to the" << " index set" << eom; - symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); - string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); - return convert_bv(char_sym); + if(f.type() == char_type) { + symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); + string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); + return convert_bv(char_sym); + } else { + assert(f.type() == java_char_type); + symbol_exprt char_sym = string_exprt::fresh_symbol("char",java_char_type); + string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); + return convert_bv(char_sym); + } } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 4b103743f8e..f453f83e3eb 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -37,20 +37,6 @@ class string_refinementt: public bv_refinementt symbol_exprt fresh_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); - irep_idt string_literal_func; - irep_idt char_literal_func; - irep_idt string_length_func; - irep_idt string_equal_func; - irep_idt string_char_at_func; - irep_idt string_concat_func; - irep_idt string_substring_func; - irep_idt string_is_prefix_func; - irep_idt string_is_suffix_func; - irep_idt string_contains_func; - irep_idt string_char_set_func; - irep_idt string_index_of_func; - irep_idt string_last_index_of_func; - static exprt is_positive(const exprt & x); private: From 37a3b75d3be7c2e6ff4857ed9f06cd9cec241fc5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 6 Sep 2016 19:14:30 +0100 Subject: [PATCH 066/221] Compatibility with java strings, and a couple of examples of java programs --- regression/strings/java_char_at/test.desc | 8 ++ .../strings/java_char_at/test_char_at.class | Bin 0 -> 695 bytes .../strings/java_char_at/test_char_at.java | 9 ++ regression/strings/java_concat/test.desc | 8 ++ .../strings/java_concat/test_concat.class | Bin 0 -> 854 bytes .../strings/java_concat/test_concat.java | 12 ++ src/goto-programs/pass_preprocess.cpp | 120 ++++++++++++++++++ src/goto-programs/pass_preprocess.h | 19 +++ src/solvers/refinement/string_expr.cpp | 20 +++ src/solvers/refinement/string_functions.cpp | 73 +++++++++++ src/solvers/refinement/string_functions.h | 35 +++++ src/solvers/refinement/string_refinement.cpp | 29 +++-- src/solvers/refinement/string_refinement.h | 1 + 13 files changed, 321 insertions(+), 13 deletions(-) create mode 100644 regression/strings/java_char_at/test.desc create mode 100644 regression/strings/java_char_at/test_char_at.class create mode 100644 regression/strings/java_char_at/test_char_at.java create mode 100644 regression/strings/java_concat/test.desc create mode 100644 regression/strings/java_concat/test_concat.class create mode 100644 regression/strings/java_concat/test_concat.java create mode 100644 src/goto-programs/pass_preprocess.cpp create mode 100644 src/goto-programs/pass_preprocess.h create mode 100644 src/solvers/refinement/string_functions.cpp create mode 100644 src/solvers/refinement/string_functions.h diff --git a/regression/strings/java_char_at/test.desc b/regression/strings/java_char_at/test.desc new file mode 100644 index 00000000000..f09a7fea678 --- /dev/null +++ b/regression/strings/java_char_at/test.desc @@ -0,0 +1,8 @@ +CORE +test_char_at.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_char_at.java line 6: SUCCESS$ +^\[assertion.2\] assertion at file test_char_at.java line 7: FAILURE$ +-- diff --git a/regression/strings/java_char_at/test_char_at.class b/regression/strings/java_char_at/test_char_at.class new file mode 100644 index 0000000000000000000000000000000000000000..7304eaf2a383c5b42c0af480874f537c50c9e795 GIT binary patch literal 695 zcmZuvO>fgc5PcIncH%nJNoWYrLR$hjMWP3U1fn3S00Jq6LlCI#q1xE1;^Nw6?eJrI z;m8?~8i`79=Rbj%wMbJCmznW=y!U3jKYo4v2H+M}9L(UnjSCfAbWp;)HVai$ammJI z2evLQI#|N8jVpv^M`W2)d6XvEqbL)@ScU}JB3Nrt66FsFhTnZfFnehz3A6nukdM>kkCwL>&j>vCnG#6(uOYr_hCb&;!9H)z~Qx%6xx~=2lDz3S3Q6sdc1M8Fh z9xIh99z0EA)c@a&$>On$&{=Y^Evq#q0AyB!xL`4 zK|bOF-*Ss@U*(?!kk{5~IWjBlvfJ!#{V}}w zWPDbWHjzZ%{ZZ213%hvBfI7CHUm3kP&ZxQjUO?jtjbFUxgNAR z!(_wt`Cjj&#lw98ri&BX^%~4bBP^C#3 z^i9Y6Q{QL?z0l!LT~RF;^C*7p1ioX(tD>HXOUP6F-`WgP*AT$mlA0@Kw zl8V2nFf5J3|6f969NFPE^_8vNN}UuRQK)OEHT^*`nwRWN?KLB}hLhplT>-C^K5ZfokZuI%Kz=&;arUn0;hVp~)X0r#>S+ U>Ud67R8=5l9}7XQB?C?W0+fWPHUIzs literal 0 HcmV?d00001 diff --git a/regression/strings/java_concat/test_concat.java b/regression/strings/java_concat/test_concat.java new file mode 100644 index 00000000000..d714ea89538 --- /dev/null +++ b/regression/strings/java_concat/test_concat.java @@ -0,0 +1,12 @@ +public class test_concat { + + public static void main(String[] argv) { + String s = new String("pi"); + int i = s.length(); + String t = new String("ppo"); + String u = s.concat(t); + char c = u.charAt(i); + assert(c == 'p'); + assert(c == 'o'); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp new file mode 100644 index 00000000000..24c3dd6ccc0 --- /dev/null +++ b/src/goto-programs/pass_preprocess.cpp @@ -0,0 +1,120 @@ +/*******************************************************************\ + +Module: Preprocess a goto-programs so that calls to the java String + library are recognized by the PASS algorithm + +Author: Romain Brenguier + +Date: September 2016 + +\*******************************************************************/ + +#include +#include + +#include "pass_preprocess.h" + +#include + + +void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt::instructionst::iterator & i_it, irep_idt function_name){ + std::cout << "pass_preprocess.cpp : found string function " << function_name << std::endl; + // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" + + //to_symbol_expr(function_call.function()).set_identifier(irep_idt("__CPROVER_uninterpreted_string_char_at")); + + code_function_callt &function_call=to_code_function_call(i_it->code); + code_typet old_type=to_code_type(function_call.function().type()); + + auxiliary_symbolt tmp_symbol; + //tmp_symbol.base_name=base_name; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=function_name; + // tmp_symbol.type=type; + symbol_table.add(tmp_symbol); + + + //debug() << "we should replace the function call by function application?" << "see builtin_functions.cpp" << eom; + + function_application_exprt rhs; + rhs.type()=old_type.return_type(); + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(function_name); + rhs.arguments()=function_call.arguments(); + code_assignt assignment(function_call.lhs(), rhs); + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; + // make sure it is in the function map + goto_functions.function_map[irep_idt(function_name)]; +} + +void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt::instructionst::iterator & i_it, irep_idt function_name){ + std::cout << "pass_preprocess.cpp : found string function call" << function_name << std::endl; + // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" + code_function_callt &function_call=to_code_function_call(i_it->code); + code_typet old_type=to_code_type(function_call.function().type()); + + auxiliary_symbolt tmp_symbol; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=function_name; + symbol_table.add(tmp_symbol); + + function_application_exprt rhs; + rhs.type()=function_call.arguments()[0].type(); + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(function_name); + for(int i = 1; i < function_call.arguments().size(); i++) + rhs.arguments().push_back(function_call.arguments()[i]); + code_assignt assignment(function_call.arguments()[0], rhs); + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; + // make sure it is in the function map + goto_functions.function_map[irep_idt(function_name)]; +} + +void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_functions, + goto_functionst::function_mapt::iterator f_it) +{ + goto_programt &goto_program=f_it->second.body; + std::cout << "replace_string_calls inside of " << f_it->first << std::endl; + + Forall_goto_program_instructions(i_it, goto_program) { + if(i_it->is_function_call()) { + code_function_callt &function_call=to_code_function_call(i_it->code); + if(function_call.function().id()==ID_symbol){ + const irep_idt function_id= + to_symbol_expr(function_call.function()).get_identifier(); + std::cout << "pass_preprocess calling : " << function_id << std::endl; + + if(function_id == irep_idt("java::java.lang.String.charAt:(I)C")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); + } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_index_of"); + } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); + } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); + } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { + make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); + } + } + } + } + return; +} + +void pass_preprocess(symbol_tablet & symbol_table, goto_functionst & goto_functions){ + std::cout << "pass_preprocess" << std::endl; + Forall_goto_functions(it, goto_functions) + { + replace_string_calls(symbol_table,goto_functions,it); + } +} + + diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h new file mode 100644 index 00000000000..34c8a5cd896 --- /dev/null +++ b/src/goto-programs/pass_preprocess.h @@ -0,0 +1,19 @@ +/*******************************************************************\ + +Module: Preprocess a goto-programs so that calls to the java String + library are recognized by the PASS algorithm + +Author: Romain Brenguier + +Date: September 2016 + +\*******************************************************************/ + +#ifndef CPROVER_PASS_PREPROCESS_H +#define CPROVER_PASS_PREPROCESS_H + +#include + +void pass_preprocess(symbol_tablet &, goto_functionst &); + +#endif diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 7c478dd083d..3840e4df398 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -13,6 +13,20 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com // For debuggin #include +enum {UNDEFINED_MODE, USE_JAVA_STRINGS, USE_C_STRINGS } string_language_mode; + +void ensure_java_strings(){ + if(string_language_mode == UNDEFINED_MODE) + string_language_mode = USE_JAVA_STRINGS; + assert(string_language_mode == USE_JAVA_STRINGS); +} + +void ensure_c_strings(){ + if(string_language_mode == UNDEFINED_MODE) + string_language_mode = USE_C_STRINGS; + assert(string_language_mode == USE_C_STRINGS); +} + string_ref_typet::string_ref_typet() : struct_typet() { components().resize(2); components()[0].set_name("length"); @@ -74,6 +88,8 @@ bool string_ref_typet::is_java_string_type(const typet &type) string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; + if(string_language_mode == USE_JAVA_STRINGS) + t = string_ref_typet(string_ref_typet::java_char_type()); symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); @@ -82,6 +98,8 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref_typet()) { string_ref_typet t(char_type); + if(char_type == string_ref_typet::java_char_type()) + ensure_java_strings(); symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); @@ -128,6 +146,8 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map + + +#define char_literal_func "__CPROVER_uninterpreted_char_literal" +#define string_length_func "__CPROVER_uninterpreted_strlen" +#define string_equal_func "__CPROVER_uninterpreted_string_equal" +#define string_char_at_func "__CPROVER_uninterpreted_char_at" +#define string_concat_func "__CPROVER_uninterpreted_strcat" +#define string_substring_func "__CPROVER_uninterpreted_substring" +#define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" +#define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" +#define string_contains_func "__CPROVER_uninterpreted_strcontains" +#define string_char_set_func "__CPROVER_uninterpreted_char_set" +#define string_index_of_func "__CPROVER_uninterpreted_strindexof" +#define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" +#define string_literal_func "__CPROVER_uninterpreted_string_literal" + +bool starts_with(std::string s, std::string t) { + for(int i = 0; i < t.length(); i++) + if(s[i] != t[i]) return false; + return true; +} + +bool is_string_literal_func(irep_idt id) { + return (starts_with(id2string(id),string_literal_func)); +} + +bool is_char_literal_func(irep_idt id) { + return (starts_with(id2string(id),char_literal_func)); +} +bool is_string_length_func(irep_idt id) { + return (starts_with(id2string(id),string_length_func)); +} +bool is_string_equal_func(irep_idt id) { + return (starts_with(id2string(id),string_equal_func)); +} +bool is_string_char_at_func(irep_idt id) { + return (starts_with(id2string(id),string_char_at_func)); +} +bool is_string_concat_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_func)); +} +bool is_string_substring_func(irep_idt id) { + return (starts_with(id2string(id),string_substring_func)); +} +bool is_string_is_prefix_func(irep_idt id) { + return (starts_with(id2string(id),string_is_prefix_func)); +} +bool is_string_is_suffix_func(irep_idt id) { + return (starts_with(id2string(id),string_is_suffix_func)); +} +bool is_string_contains_func(irep_idt id) { + return (starts_with(id2string(id),string_contains_func)); +} +bool is_string_char_set_func(irep_idt id) { + return (starts_with(id2string(id),string_char_set_func)); +} +bool is_string_index_of_func(irep_idt id) { + return (starts_with(id2string(id),string_index_of_func)); +} +bool is_string_last_index_of_func(irep_idt id) { + return (starts_with(id2string(id),string_last_index_of_func)); +} + diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h new file mode 100644 index 00000000000..a2723513c54 --- /dev/null +++ b/src/solvers/refinement/string_functions.h @@ -0,0 +1,35 @@ +/*******************************************************************\ + +Module: Defines identifiers for string functions + +Author: Romain Brenguier + +Date: September 2016 + +\*******************************************************************/ + +#ifndef CPROVER_STRING_FUNCTIONS_H +#define CPROVER_STRING_FUNCTIONS_H + +#include + +#include +#include + +bool starts_with(std::string s, std::string t); +bool is_string_literal_func(irep_idt id); +bool is_char_literal_func(irep_idt id); +bool is_string_length_func(irep_idt id); +bool is_string_equal_func(irep_idt id); +bool is_string_char_at_func(irep_idt id); +bool is_string_concat_func(irep_idt id); +bool is_string_substring_func(irep_idt id); +bool is_string_is_prefix_func(irep_idt id); +bool is_string_is_suffix_func(irep_idt id); +bool is_string_contains_func(irep_idt id); +bool is_string_char_set_func(irep_idt id); +bool is_string_index_of_func(irep_idt id); +bool is_string_last_index_of_func(irep_idt id); + + +#endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9587de1b08e..a00602991b4 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -158,15 +158,11 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type.id()!=ID_bool) { if(string_ref_typet::is_unrefined_string_type(type)) { - debug() << "boolbv_set_equality_to_true found unrefined string" << eom - << expr.pretty() << eom; symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; } else if(type == char_type) { - debug() << "boolbv_set_equality_to_true found char type" << eom - << expr.pretty() << eom; const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); @@ -175,8 +171,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) return false; } else if(type == java_char_type) { - debug() << "boolbv_set_equality_to_true found java char type" << eom - << expr.pretty() << eom; const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); const irep_idt &identifier = sym.get_identifier(); @@ -185,9 +179,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) return false; } else { - debug() << "boolbv_set_equality_to_true non string or char: " << eom - << expr.pretty() << eom; - return SUB::boolbv_set_equality_to_true(expr); + return SUB::boolbv_set_equality_to_true(expr); } } @@ -741,17 +733,24 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) //debug() << "string_refinementt::get_array(" << arr.get(ID_identifier) // << "," << size.get(ID_value) << ")" << eom; exprt val = get(arr); - + unsignedbv_typet chart; + if(arr.type().subtype() == char_type) + chart = char_type; + else { + assert(arr.type().subtype() == java_char_type); + chart = java_char_type; + } + if(val.id() == "array-list") { exprt ret = - array_of_exprt(char_type.zero_expr(), array_typet(char_type, infinity_exprt(index_type))); + array_of_exprt(chart.zero_expr(), array_typet(chart, infinity_exprt(index_type))); // size)); for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; assert(index.type() == index_type); exprt value = val.operands()[i*2+1]; - assert(value.type() == char_type); + assert(value.type() == char_type || value.type() == java_char_type); ret = with_exprt(ret, index, value); } return ret; @@ -1095,7 +1094,11 @@ void string_refinementt::update_index_set(const exprt &formula) if(index_set[s].insert(simplified).second) current_index_set[s].insert(simplified); } else { - debug() << "update_index_set: index expression of non string" << eom; + debug() << "update_index_set: index expression of non string" << eom + << "Warning: concidering it as a string anyway" << eom; + const exprt &simplified = simplify_sum(i); + if(index_set[s].insert(simplified).second) + current_index_set[s].insert(simplified); } } else { forall_operands(it, cur) { diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index f453f83e3eb..7267ea55357 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -42,6 +42,7 @@ class string_refinementt: public bv_refinementt private: typedef bv_refinementt SUB; + // for now this is C string type but this probably needs to be generalized string_ref_typet string_type; inline size_t get_string_width() From b254c259c59639db1cd57d897a6f136ec1478879 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 7 Sep 2016 16:43:36 +0100 Subject: [PATCH 067/221] Corrected type checkm for string equality in Java programs --- src/cbmc/cbmc_parse_options.cpp | 23 -------------------- src/cbmc/cbmc_solvers.cpp | 1 - src/goto-programs/pass_preprocess.cpp | 12 +++------- src/goto-symex/symex_function_call.cpp | 7 ------ src/solvers/refinement/string_refinement.cpp | 22 ++++++++++++++----- 5 files changed, 20 insertions(+), 45 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 2f0efecd273..85044fa606c 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -892,17 +892,6 @@ bool cbmc_parse_optionst::process_goto_program( string_instrumentation( symbol_table, get_message_handler(), goto_functions); - - /* - debug() << "adding symbol for strings" << eom; - irep_idt function_char_at_name("java::java.lang.String.charAt:(I)C"); - goto_programt::targett ret = goto_functions.function_map[function_char_at_name].body.add_instruction(); - ret->make_return(); - code_function_callt function_call; - symbol_exprt function("__CPROVER_uninterpreted_string_char_at",void_typet()); - //END_FUNCTION*/ - show_symbol_table(); - // remove function pointers status() << "Removal of function pointers and virtual functions" << eom; remove_function_pointers(symbol_table, goto_functions, @@ -920,25 +909,13 @@ bool cbmc_parse_optionst::process_goto_program( status() << "Partial Inlining" << eom; goto_partial_inline(goto_functions, ns, ui_message_handler); - debug() << "After partial inlining:" << eom; goto_functions.output(ns,debug()); debug() << "=================" << eom; - - if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; pass_preprocess(symbol_table, goto_functions); } - debug() << "After PASS preprocessing:" << eom; goto_functions.output(ns,debug()); debug() << "=================" << eom; - // remove returns, gcc vectors, complex remove_returns(symbol_table, goto_functions); - - //goto_functions.function_map[irep_idt("java::java.lang.String.charAt:(I)C")].clear(); - - debug() << "After remove returns" << eom; - goto_functions.output(ns,debug()); - debug() << "=================" << eom; - remove_vector(symbol_table, goto_functions); remove_complex(symbol_table, goto_functions); diff --git a/src/cbmc/cbmc_solvers.cpp b/src/cbmc/cbmc_solvers.cpp index f179b504b1d..cdf2ed03fae 100644 --- a/src/cbmc/cbmc_solvers.cpp +++ b/src/cbmc/cbmc_solvers.cpp @@ -337,7 +337,6 @@ Function: cbmc_solverst::get_string_refinement cbmc_solverst::solvert* cbmc_solverst::get_string_refinement() { - std::cout << "get_string_refinement" << std::endl; propt *prop; prop=new satcheck_no_simplifiert(); prop->set_message_handler(get_message_handler()); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 24c3dd6ccc0..af2b4a31043 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,12 +14,9 @@ Date: September 2016 #include "pass_preprocess.h" -#include - void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt::instructionst::iterator & i_it, irep_idt function_name){ - std::cout << "pass_preprocess.cpp : found string function " << function_name << std::endl; // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" //to_symbol_expr(function_call.function()).set_identifier(irep_idt("__CPROVER_uninterpreted_string_char_at")); @@ -35,7 +32,6 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f // tmp_symbol.type=type; symbol_table.add(tmp_symbol); - //debug() << "we should replace the function call by function application?" << "see builtin_functions.cpp" << eom; function_application_exprt rhs; @@ -53,7 +49,6 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt::instructionst::iterator & i_it, irep_idt function_name){ - std::cout << "pass_preprocess.cpp : found string function call" << function_name << std::endl; // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -82,7 +77,6 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; - std::cout << "replace_string_calls inside of " << f_it->first << std::endl; Forall_goto_program_instructions(i_it, goto_program) { if(i_it->is_function_call()) { @@ -90,16 +84,17 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu if(function_call.function().id()==ID_symbol){ const irep_idt function_id= to_symbol_expr(function_call.function()).get_identifier(); - std::cout << "pass_preprocess calling : " << function_id << std::endl; if(function_id == irep_idt("java::java.lang.String.charAt:(I)C")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_index_of"); + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strindexof"); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); + } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); } @@ -110,7 +105,6 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } void pass_preprocess(symbol_tablet & symbol_table, goto_functionst & goto_functions){ - std::cout << "pass_preprocess" << std::endl; Forall_goto_functions(it, goto_functions) { replace_string_calls(symbol_table,goto_functions,it); diff --git a/src/goto-symex/symex_function_call.cpp b/src/goto-symex/symex_function_call.cpp index a7f1564adfa..7997e1a9c63 100644 --- a/src/goto-symex/symex_function_call.cpp +++ b/src/goto-symex/symex_function_call.cpp @@ -279,8 +279,6 @@ void goto_symext::symex_function_call_code( // find code in function map - std::cout << "goto_symext::symex_function_call_code(" << identifier << ")" << std::endl; - goto_functionst::function_mapt::const_iterator it= goto_functions.function_map.find(identifier); @@ -321,11 +319,6 @@ void goto_symext::symex_function_call_code( { no_body(identifier); - if(identifier == irep_idt("java::java.lang.String.charAt:(I)C")) - std::cout << "this is string_char_at" << std::endl; - else - std::cout << "this is not string_char_at" << std::endl; - // record the return target.function_return(state.guard.as_expr(), identifier, state.source); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index a00602991b4..97df4d22356 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -193,7 +193,6 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; - debug() << "string_refinementt::convert_symbol " << identifier << " of type " << type << eom; if (string_ref_typet::is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality @@ -364,9 +363,12 @@ string_exprt string_refinementt::make_string(const exprt & str) bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { - assert(f.type() == bool_typet()); + debug() << "convert_string_equal of f of type "<< f.type().pretty() << eom; + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + symbol_exprt eq = fresh_boolean("equal"); - bvt bv = convert_bv(eq); + typecast_exprt tc_eq(eq,f.type()); + bvt bv = convert_bv(tc_eq); const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string equal? @@ -555,12 +557,22 @@ bvt string_refinementt::convert_string_index_of( { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string index of? - + if(f.type() != index_type) { + debug() << "convert_string_index_of of the wrong type "<< f.type().pretty() << eom; + assert(false); + } + symbol_exprt index = fresh_index("index_of"); symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; - assert(c.type() == char_type || c.type() == java_char_type); + + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) // && forall n. 0 < n < i => s[n] != c From ea93657cb8dcd1b3f44b90826edbc927499f9961 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 7 Sep 2016 17:00:56 +0100 Subject: [PATCH 068/221] Corrected type checkm for string equality in Java programs --- src/goto-programs/pass_preprocess.cpp | 4 ++++ src/solvers/refinement/string_functions.cpp | 8 ++++++++ src/solvers/refinement/string_functions.h | 2 ++ src/solvers/refinement/string_refinement.cpp | 20 ++++++++++++-------- src/solvers/refinement/string_refinement.h | 4 ++-- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index af2b4a31043..ebcfabaee35 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -95,6 +95,10 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal"); + } else if(function_id == irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_startswith"); + } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); } diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index f65be28723c..86baac94dd4 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -18,6 +18,8 @@ Date: September 2016 #define string_substring_func "__CPROVER_uninterpreted_substring" #define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" #define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" +#define string_endswith_func "__CPROVER_uninterpreted_string_endswith" +#define string_startswith_func "__CPROVER_uninterpreted_string_startswith" #define string_contains_func "__CPROVER_uninterpreted_strcontains" #define string_char_set_func "__CPROVER_uninterpreted_char_set" #define string_index_of_func "__CPROVER_uninterpreted_strindexof" @@ -58,6 +60,12 @@ bool is_string_is_prefix_func(irep_idt id) { bool is_string_is_suffix_func(irep_idt id) { return (starts_with(id2string(id),string_is_suffix_func)); } +bool is_string_startswith_func(irep_idt id) { + return (starts_with(id2string(id),string_startswith_func)); +} +bool is_string_endswith_func(irep_idt id) { + return (starts_with(id2string(id),string_endswith_func)); +} bool is_string_contains_func(irep_idt id) { return (starts_with(id2string(id),string_contains_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index a2723513c54..3e60f635b80 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -26,6 +26,8 @@ bool is_string_concat_func(irep_idt id); bool is_string_substring_func(irep_idt id); bool is_string_is_prefix_func(irep_idt id); bool is_string_is_suffix_func(irep_idt id); +bool is_string_startswith_func(irep_idt id); +bool is_string_endswith_func(irep_idt id); bool is_string_contains_func(irep_idt id); bool is_string_char_set_func(irep_idt id); bool is_string_index_of_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 97df4d22356..f22ea86d25a 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -255,6 +255,10 @@ bvt string_refinementt::convert_function_application( return convert_string_is_prefix(expr); } else if (is_string_is_suffix_func(id)) { return convert_string_is_suffix(expr); + } else if (is_string_startswith_func(id)) { + return convert_string_is_prefix(expr,true); + } else if (is_string_endswith_func(id)) { + return convert_string_is_suffix(expr,true); } else if (is_string_contains_func(id)) { return convert_string_contains(expr); } else if (is_string_index_of_func(id)) { @@ -417,15 +421,15 @@ exprt string_refinementt::is_positive(const exprt & x) { return binary_relation_exprt(x, ID_ge, index_of_int(0)); } -bvt string_refinementt::convert_string_is_prefix( - const function_application_exprt &f) +bvt string_refinementt::convert_string_is_prefix +(const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string isprefix symbol_exprt isprefix = fresh_boolean("isprefix"); - string_exprt s0 = make_string(args[0]); - string_exprt s1 = make_string(args[1]); + string_exprt s0 = make_string(args[swap_arguments?1:0]); + string_exprt s1 = make_string(args[swap_arguments?0:1]); string_axioms.emplace_back(isprefix, s1 >= s0); @@ -449,15 +453,15 @@ bvt string_refinementt::convert_string_is_prefix( } -bvt string_refinementt::convert_string_is_suffix( - const function_application_exprt &f) +bvt string_refinementt::convert_string_is_suffix +(const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string issuffix? symbol_exprt issuffix = fresh_boolean("issuffix"); - string_exprt s0 = make_string(args[0]); - string_exprt s1 = make_string(args[1]); + string_exprt s0 = make_string(args[swap_arguments?1:0]); + string_exprt s1 = make_string(args[swap_arguments?0:1]); // issufix(s1,s0) => s0.length >= s1.length diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 7267ea55357..f5cfa7ed84f 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -67,8 +67,8 @@ class string_refinementt: public bv_refinementt // properties to be checked bvt convert_string_equal(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); - bvt convert_string_is_prefix(const function_application_exprt &f); - bvt convert_string_is_suffix(const function_application_exprt &f); + bvt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_contains(const function_application_exprt &f); bvt convert_string_index_of(const function_application_exprt &f); bvt convert_string_last_index_of(const function_application_exprt &f); From f04df3935d5fe77cc2dc1aa90a4481f23b1ec65a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sat, 10 Sep 2016 17:35:44 +0100 Subject: [PATCH 069/221] Pass preprocessing of java string literals --- regression/strings/java_prefix/test.desc | 8 +++ .../strings/java_prefix/test_prefix.class | Bin 0 -> 806 bytes .../strings/java_prefix/test_prefix.java | 16 ++++++ regression/strings/test_prefix/test.c | 10 ++-- src/goto-programs/pass_preprocess.cpp | 54 +++++++++++++++++- src/solvers/refinement/string_expr.cpp | 46 +++++++++------ src/solvers/refinement/string_expr.h | 5 +- src/solvers/refinement/string_refinement.cpp | 46 ++++++++++----- src/solvers/refinement/string_refinement.h | 5 +- 9 files changed, 148 insertions(+), 42 deletions(-) create mode 100644 regression/strings/java_prefix/test.desc create mode 100644 regression/strings/java_prefix/test_prefix.class create mode 100644 regression/strings/java_prefix/test_prefix.java diff --git a/regression/strings/java_prefix/test.desc b/regression/strings/java_prefix/test.desc new file mode 100644 index 00000000000..1f4ed380bf0 --- /dev/null +++ b/regression/strings/java_prefix/test.desc @@ -0,0 +1,8 @@ +CORE +test_prefix.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_prefix.java line 13: SUCCESS$ +^\[assertion.2\] assertion at file test_prefix.java line 14: FAILURE$ +-- diff --git a/regression/strings/java_prefix/test_prefix.class b/regression/strings/java_prefix/test_prefix.class new file mode 100644 index 0000000000000000000000000000000000000000..4be8d555d6fd97c46c893c83ebe6fab81af11cab GIT binary patch literal 806 zcmZ`$T~8B16g|`KSGQYRS_}09qzGClP!ppukr)kXOf2|NV*@^zZFj`MWtYrOjlZQ2 zzWS^tG?7H#{ZZOy_Ig}C*I;_s^F_ok*?8IB_22oe(2sUn9VJDyb60;Xbd=wJyW#JrcpHmEk-=H( zhe!3@PCSr({#fX0CB+l` zGy?mifvC`JrAbEXKaVQ;8v230T4dXY$ZVCfBN*+nxse7I1)I&~1K78X=887vXE;NY zs>TrcL*%wbaK9g=%u^}dF_U(jgG0Un7d8=gFh#^?;9-HHJ4F2{k)I?)4Vhn*uxw1( wsQo#N6qM=Dg%eq~QvQ^!Ab$XF2;2AwBl`u;xZ|-#UDZUUa9>a2VoK=JZt<8 literal 0 HcmV?d00001 diff --git a/regression/strings/java_prefix/test_prefix.java b/regression/strings/java_prefix/test_prefix.java new file mode 100644 index 00000000000..091d91b21b9 --- /dev/null +++ b/regression/strings/java_prefix/test_prefix.java @@ -0,0 +1,16 @@ +public class test_prefix { + + public static void main(String[] argv) { + String s = new String("Hello World!"); + //String t = new String("Hello"); + //String u = new String("Wello"); + String t = "Hello"; + String u = new String("Wello"); + //boolean b = s.startsWith("Hello"); + //boolean c = s.startsWith("Wello"); + boolean b = s.startsWith(t); + boolean c = s.startsWith(u); + assert(b); + assert(c); + } +} diff --git a/regression/strings/test_prefix/test.c b/regression/strings/test_prefix/test.c index 91f24882ef2..17db1a81740 100644 --- a/regression/strings/test_prefix/test.c +++ b/regression/strings/test_prefix/test.c @@ -4,12 +4,14 @@ int main() { - __CPROVER_string s; + __CPROVER_string s = __CPROVER_uninterpreted_string_literal("Hello World!"); - __CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("pippo"))); + //__CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("Hello World!"))); - assert(__CPROVER_string_isprefix(__CPROVER_string_literal("pi"),s)); - assert(__CPROVER_string_isprefix(__CPROVER_string_literal("pp"),s)); + __CPROVER_bool b = __CPROVER_string_isprefix(__CPROVER_string_literal("Hello"),s); + __CPROVER_bool c = __CPROVER_string_isprefix(__CPROVER_string_literal("Wello"),s); + assert(b); + assert(c); return 0; } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index ebcfabaee35..94def08f709 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,6 +14,8 @@ Date: September 2016 #include "pass_preprocess.h" +#include +#include void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt::instructionst::iterator & i_it, irep_idt function_name){ @@ -47,6 +49,30 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f goto_functions.function_map[irep_idt(function_name)]; } +void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt::instructionst::iterator & i_it, irep_idt function_name){ + assert(i_it->is_assign()); + code_assignt &assign=to_code_assign(i_it->code); + typet old_type=assign.rhs().type(); + + auxiliary_symbolt tmp_symbol; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=function_name; + symbol_table.add(tmp_symbol); + + function_application_exprt rhs; + rhs.type()=old_type; + rhs.add_source_location()=assign.source_location(); + rhs.function()=symbol_exprt(function_name); + rhs.arguments().push_back(address_of_exprt(assign.rhs().op0())); + code_assignt assignment(assign.lhs(), rhs); + assignment.add_source_location()=assign.source_location(); + i_it->make_assignment(); + i_it->code=assignment; + goto_functions.function_map[irep_idt(function_name)]; +} + void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt::instructionst::iterator & i_it, irep_idt function_name){ // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" @@ -73,6 +99,18 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g goto_functions.function_map[irep_idt(function_name)]; } +bool has_java_string_type(const exprt &expr) +{ + const typet type = expr.type(); + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_symbol) { + irep_idt tag = to_symbol_type(subtype).get_identifier(); + return (tag == irep_idt("java::java.lang.String")); + } else return false; + } else return false; +} void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_functions, goto_functionst::function_mapt::iterator f_it) { @@ -103,7 +141,21 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); } } - } + } else { + //std::cout << "processing a none function call " << i_it->code.pretty() << std::endl; + if(i_it->is_assign()) { + code_assignt assignment = to_code_assign(i_it->code); + if(has_java_string_type(assignment.rhs()) ) { + std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; + if(assignment.rhs().operands().size() == 1 && + assignment.rhs().op0().id() ==ID_symbol) { + std::string id(to_symbol_expr(assignment.rhs().op0()).get_identifier().c_str()); + std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; + if(id.substr(0,31) == "java::java.lang.String.Literal.") + make_string_function_of_assign(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); + } + } + }} } return; } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 3840e4df398..35c1c18d764 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -190,7 +190,30 @@ void string_exprt::of_function_application(const function_application_exprt & ex } throw "non string function"; } - + +irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ + std::string tmp(s.get(ID_identifier).c_str()); + std::string value = tmp.substr(31); + std::cout << "of_string_litteral: " << value << std::endl; + return irep_idt(value); +} + +void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ + for (std::size_t i = 0; i < sval.size(); ++i) { + std::string idx_binary = integer2binary(i,INDEX_WIDTH); + constant_exprt idx(idx_binary, string_ref_typet::index_type()); + std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + constant_exprt c(sval_binary,char_type); + equal_exprt lemma(index_exprt(content(), idx), c); + axioms.emplace_back(lemma); + } + + std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); + exprt s_length = constant_exprt(s_length_binary, string_ref_typet::index_type()); + + axioms.emplace_back(equal_exprt(length(),s_length)); +} + void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); @@ -217,29 +240,18 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ assert (arg.operands().size() == 1); assert(string_ref_typet::is_unrefined_string_type(arg.type())); const exprt &s = arg.op0(); + std::cout << "it seems the value of the string is lost, " << "we need to recover it from the identifier" << std::endl; - std::string tmp(s.get(ID_identifier).c_str()); + /*std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); - std::cout << "of_string_litteral: " << value << std::endl; - sval = irep_idt(value); + std::cout << "of_string_litteral: " << value << std::endl;*/ + sval = extract_java_string(to_symbol_expr(s)); char_width = JAVA_CHAR_WIDTH; char_type = string_ref_typet::java_char_type(); } - for (std::size_t i = 0; i < sval.size(); ++i) { - std::string idx_binary = integer2binary(i,INDEX_WIDTH); - constant_exprt idx(idx_binary, string_ref_typet::index_type()); - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); - constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content(), idx), c); - axioms.emplace_back(lemma); - } - - std::string s_length_binary = integer2binary(unsigned(sval.size()),INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, string_ref_typet::index_type()); - - axioms.emplace_back(equal_exprt(length(),s_length)); + of_string_constant(sval,char_width,char_type,axioms); } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 36f218ee470..2156a8d9f10 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -98,10 +98,13 @@ class string_exprt : public struct_exprt { inline binary_relation_exprt operator<= (const exprt & rhs) { return binary_relation_exprt(length(), ID_le, rhs); } + static irep_idt extract_java_string(const symbol_exprt & s); + + void of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms); + private: // Auxiliary functions for of_expr void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f22ea86d25a..9807b2a9c35 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -348,6 +348,20 @@ void string_refinementt::add_lemma(const exprt &lemma) add_lemma(implies_exprt(prem,body));*/ } + + +string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ + if(string_ref_typet::is_java_string_type(sym.type()) + && starts_with(std::string(sym.get(ID_identifier).c_str()),"java::java.lang.String.Literal.")) { + string_exprt s; + s.of_string_constant(string_exprt::extract_java_string(sym),JAVA_CHAR_WIDTH,string_ref_typet::java_char_type(),string_axioms); + return s; + } + else + return symbol_to_string[sym.get_identifier()]; +} + + void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { if(str.id()==ID_symbol) @@ -358,6 +372,8 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str string_exprt string_refinementt::make_string(const exprt & str) { + debug() << " make_string of " << str.pretty() << eom; + if(str.id()==ID_symbol) return string_of_symbol(to_symbol_expr(str)); else @@ -367,12 +383,10 @@ string_exprt string_refinementt::make_string(const exprt & str) bvt string_refinementt::convert_string_equal( const function_application_exprt &f) { - debug() << "convert_string_equal of f of type "<< f.type().pretty() << eom; assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - + symbol_exprt eq = fresh_boolean("equal"); typecast_exprt tc_eq(eq,f.type()); - bvt bv = convert_bv(tc_eq); const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string equal? @@ -402,7 +416,7 @@ bvt string_refinementt::convert_string_equal( or_exprt(notequal_exprt(s1.length(), s2.length()), string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); - return bv; + return convert_bv(tc_eq); } @@ -413,8 +427,7 @@ bvt string_refinementt::convert_string_length( assert(args.size() == 1); //bad args to string length? string_exprt str = make_string(args[0]); exprt length = str.length(); - bvt bv = convert_bv(length); - return bv; + return convert_bv(length); } exprt string_refinementt::is_positive(const exprt & x) @@ -426,8 +439,10 @@ bvt string_refinementt::convert_string_is_prefix { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string isprefix + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt isprefix = fresh_boolean("isprefix"); + typecast_exprt tc_isprefix(isprefix,f.type()); string_exprt s0 = make_string(args[swap_arguments?1:0]); string_exprt s1 = make_string(args[swap_arguments?0:1]); @@ -443,13 +458,15 @@ bvt string_refinementt::convert_string_is_prefix // forall witness < s0.length. isprefix => s0[witness] = s2[witness] or_exprt s0_notpref_s1(not_exprt(s1 >= s0), - and_exprt(s0 > witness, - notequal_exprt(s0[witness],s1[witness]))); + and_exprt(is_positive(witness), + and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[witness])))); - string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),and_exprt(is_positive(witness),s0_notpref_s1))); + debug() << "Warning: the generated axiom for prefix is not correct?" << eom; + string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); - assert(f.type() == bool_typet()); - return convert_bv(isprefix); + + return convert_bv(tc_isprefix); } @@ -458,8 +475,10 @@ bvt string_refinementt::convert_string_is_suffix { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string issuffix? + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt issuffix = fresh_boolean("issuffix"); + typecast_exprt tc_issuffix(issuffix,f.type()); string_exprt s0 = make_string(args[swap_arguments?1:0]); string_exprt s1 = make_string(args[swap_arguments?0:1]); @@ -492,10 +511,7 @@ bvt string_refinementt::convert_string_is_suffix string_axioms.emplace_back(lemma2); - assert(f.type() == bool_typet()); - bvt bv = convert_bv(issuffix); - - return bv; + return convert_bv(tc_issuffix); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index f5cfa7ed84f..15ccf6f34ec 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -115,10 +115,7 @@ class string_refinementt: public bv_refinementt symbol_to_string[sym.get_identifier()]= expr; } - inline string_exprt string_of_symbol(const symbol_exprt & sym){ - return symbol_to_string[sym.get_identifier()]; - } - + string_exprt string_of_symbol(const symbol_exprt & sym); // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. From 752676477f94626a1738b2eb1024c6e239b6a674 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sat, 10 Sep 2016 18:16:12 +0100 Subject: [PATCH 070/221] improved pass processing for string literals inside arguments of functions --- .../strings/java_prefix/test_prefix.class | Bin 806 -> 747 bytes .../strings/java_prefix/test_prefix.java | 10 ++-- regression/strings/test_prefix/test.desc | 4 +- src/goto-programs/pass_preprocess.cpp | 52 +++++++++++++++--- src/goto-programs/pass_preprocess.h | 2 + 5 files changed, 53 insertions(+), 15 deletions(-) diff --git a/regression/strings/java_prefix/test_prefix.class b/regression/strings/java_prefix/test_prefix.class index 4be8d555d6fd97c46c893c83ebe6fab81af11cab..5eb6f2d9f3f98ab1859d870dbcfeaa6b55e054d7 100644 GIT binary patch delta 441 zcmYk2PfG$p7{;GjXLfeiHP_WGvo!6Gm8l9qQCUJPL^vi-Jg3PkjLK5`KU> zSENu-_r6Nsp?YVbKQO%SywAKd&+naE{X^8>Kc8O#?4V{Lj+}ud1Iq^T77AD~VWKEe zvLKO@ShcW*b%~A9!GM<~Hb+mjU=B$J`?wv3y<(%+56?>sqM=I4kxY#?wyUM&&LI0xL8Q-wx&?FXsIazgub}=xJ5k-fpJY_~%RAylJ zsu3xQdL%Mpc9EvNYQ2UAL3!WRPTbh3@A4_cpw5(N& z3KSA*-(TrJRNtMR1ebfh@7(Wk&V5y`)!mo3$0q>mSThj797kNkya5Rd8WI|kB24M< zW07OYfG$eX29~kHk?ED%a+X?pw}pKRK?dux)~OZUTBBY(X}2yKbq4d`+;y9YO0(sj zB~4h!F(@8KSP^d~9OO+*V6v|>M=h9GMX|rloJcrR{y%Uhd)n`?YS&L{0cOQSA4NXU zb_D6RDT@;_LM1l>yAy>7(XDzUBNtN$Q!Glas8uB_k0DiU-w1NqR*t+xrR3Pj55YHN zryxMNhcc^Fx+sb~7fSIIL#>}Cl5Aw@WcrffU#ie=*}Jn*9J< CHAI~N diff --git a/regression/strings/java_prefix/test_prefix.java b/regression/strings/java_prefix/test_prefix.java index 091d91b21b9..9d1e28494af 100644 --- a/regression/strings/java_prefix/test_prefix.java +++ b/regression/strings/java_prefix/test_prefix.java @@ -1,14 +1,14 @@ public class test_prefix { public static void main(String[] argv) { - String s = new String("Hello World!"); + String s = "Hello World!"; + //new String("Hello World!"); //String t = new String("Hello"); //String u = new String("Wello"); - String t = "Hello"; - String u = new String("Wello"); - //boolean b = s.startsWith("Hello"); + String u = "Wello"; + boolean b = s.startsWith("Hello"); //boolean c = s.startsWith("Wello"); - boolean b = s.startsWith(t); + //boolean b = s.startsWith(t); boolean c = s.startsWith(u); assert(b); assert(c); diff --git a/regression/strings/test_prefix/test.desc b/regression/strings/test_prefix/test.desc index 087ad833169..187565433e4 100644 --- a/regression/strings/test_prefix/test.desc +++ b/regression/strings/test_prefix/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strprefixof(__CPROVER_uninterpreted_string_literal(\"pi\"), s): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strprefixof(__CPROVER_uninterpreted_string_literal(\"pp\"), s): FAILURE$ +^\[main.assertion.1\] assertion b: SUCCESS$ +^\[main.assertion.2\] assertion c: FAILURE$ -- diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 94def08f709..fca44506f0e 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -40,7 +40,9 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f rhs.type()=old_type.return_type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - rhs.arguments()=function_call.arguments(); + //rhs.arguments()=function_call.arguments(); + for(int i = 0; i < function_call.arguments().size(); i++) + rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.lhs(), rhs); assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); @@ -60,12 +62,13 @@ void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functions tmp_symbol.mode=ID_java; tmp_symbol.name=function_name; symbol_table.add(tmp_symbol); - - function_application_exprt rhs; + + exprt rhs = replace_string_literals(symbol_table,goto_functions,assign.rhs().op0()); + /*function_application_exprt rhs; rhs.type()=old_type; rhs.add_source_location()=assign.source_location(); rhs.function()=symbol_exprt(function_name); - rhs.arguments().push_back(address_of_exprt(assign.rhs().op0())); + rhs.arguments().push_back(address_of_exprt(assign.rhs().op0()));*/ code_assignt assignment(assign.lhs(), rhs); assignment.add_source_location()=assign.source_location(); i_it->make_assignment(); @@ -90,7 +93,7 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); for(int i = 1; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(function_call.arguments()[i]); + rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.arguments()[0], rhs); assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); @@ -138,13 +141,20 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { - make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); + make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } } } else { //std::cout << "processing a none function call " << i_it->code.pretty() << std::endl; if(i_it->is_assign()) { + std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; code_assignt assignment = to_code_assign(i_it->code); + exprt new_rhs = replace_string_literals(symbol_table,goto_functions,assignment.rhs()); + code_assignt new_assignment(assignment.lhs(),new_rhs); + new_assignment.add_source_location()=assignment.source_location(); + i_it->make_assignment(); + i_it->code=new_assignment; + /* if(has_java_string_type(assignment.rhs()) ) { std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; if(assignment.rhs().operands().size() == 1 && @@ -154,12 +164,38 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu if(id.substr(0,31) == "java::java.lang.String.Literal.") make_string_function_of_assign(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); } - } - }} + }*/ + } + } } return; } +exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & goto_functions, + const exprt & expr) { + if(has_java_string_type(expr) ) { + if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) { + std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); + std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; + if(id.substr(0,31) == "java::java.lang.String.Literal."){ + function_application_exprt rhs; + rhs.type()=expr.type(); + rhs.add_source_location()=expr.source_location(); + rhs.function()=symbol_exprt("__CPROVER_uninterpreted_string_literal"); + goto_functions.function_map[irep_idt("__CPROVER_uninterpreted_string_literal")]; + rhs.arguments().push_back(address_of_exprt(expr.op0())); + auxiliary_symbolt tmp_symbol; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name="__CPROVER_uninterpreted_string_literal"; + symbol_table.add(tmp_symbol); + return rhs; + } + } + } + return expr; +} + void pass_preprocess(symbol_tablet & symbol_table, goto_functionst & goto_functions){ Forall_goto_functions(it, goto_functions) { diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 34c8a5cd896..c591ba2eced 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -14,6 +14,8 @@ Date: September 2016 #include + +exprt replace_string_literals(symbol_tablet &, goto_functionst &,const exprt & ); void pass_preprocess(symbol_tablet &, goto_functionst &); #endif From fab0bc6cc6a76fcdbd6b90dca4a9c405de565ece Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sat, 10 Sep 2016 19:49:49 +0100 Subject: [PATCH 071/221] pass processing of new String --- regression/strings/java_prefix/test.desc | 4 ++-- .../strings/java_prefix/test_prefix.class | Bin 747 -> 788 bytes regression/strings/java_prefix/test_prefix.java | 3 +-- src/solvers/refinement/string_expr.cpp | 14 ++++++++++++++ src/solvers/refinement/string_expr.h | 1 + src/solvers/refinement/string_functions.cpp | 4 ++++ src/solvers/refinement/string_functions.h | 1 + 7 files changed, 23 insertions(+), 4 deletions(-) diff --git a/regression/strings/java_prefix/test.desc b/regression/strings/java_prefix/test.desc index 1f4ed380bf0..fc97a77bd89 100644 --- a/regression/strings/java_prefix/test.desc +++ b/regression/strings/java_prefix/test.desc @@ -3,6 +3,6 @@ test_prefix.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_prefix.java line 13: SUCCESS$ -^\[assertion.2\] assertion at file test_prefix.java line 14: FAILURE$ +^\[assertion.1\] assertion at file test_prefix.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_prefix.java line 13: FAILURE$ -- diff --git a/regression/strings/java_prefix/test_prefix.class b/regression/strings/java_prefix/test_prefix.class index 5eb6f2d9f3f98ab1859d870dbcfeaa6b55e054d7..424d82bb9f38c3c8d4b9bc76668bd80bf7efb91e 100644 GIT binary patch delta 482 zcmZ8cO-lk%6g_X8@y(Yxj*VGnX=SOS8H6p0!k|S9TLpb`*_g2z4goqO&*_kJo5!Q+pw*EazB*wYchDo0Yqnhpu;DpD%aBHhqn zV3T7@hbAN$9oyL9$PUU~IY%vnr{bA~2!nOk=ru}Sqtz^3c00GNCWCo?<9Y2=t=;ji z(qG~7X=dw2oE*p28$+kQ5qgHH|Auk{|6rBu7*8U?;Er&z^u6FqbvY& zM}(qHza$|eRPs}>u@E9kG3b+wu2_Uaxscvdt3r4>gH*QzQ^-|Yxp3{^1pLG;P&|;I zp^gwvj$q87)u+(k`#xnk@*ht4NWRY+IOQ^Q!Vpw)GmwCZBK<0~aEz)Bq;Db=jwOyb tJw^-LBwn6hQTEp*HVR_`a|A9wLJqt@9cSiVzc-1Q3Zzg)T)yI$6F+mgL6HCe delta 441 zcmYk2PfG$p7{;GjXLfeiHP_WGvo!6Gm8l9qQCUJPL^vi-Jg3PkjKfL-++c zSENu-_r6Nsp?YVbKQO%SywAKd&+nZZ{X^8>Kc8O#?4V{Lj+}ud1Iq^T77AD~VWKEe zvLKO@ShcW*b%~A9!GM<~Hb+mjU=B$J`?wv3y<(%+56?>sqM=I4kxY#?wyUM&&LI0xL8Q-$z&?FXsIazgub}=xJ5k-fpJY_~%RAylJ zsu3xQdL%Mpc9EvNYQ2UAL3!WRPTbh3@A4_cpm@Q diff --git a/regression/strings/java_prefix/test_prefix.java b/regression/strings/java_prefix/test_prefix.java index 9d1e28494af..382fd48faf0 100644 --- a/regression/strings/java_prefix/test_prefix.java +++ b/regression/strings/java_prefix/test_prefix.java @@ -1,8 +1,7 @@ public class test_prefix { public static void main(String[] argv) { - String s = "Hello World!"; - //new String("Hello World!"); + String s = new String("Hello World!"); //String t = new String("Hello"); //String u = new String("Wello"); String u = "Wello"; diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 35c1c18d764..6a1858451ba 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -186,6 +186,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_substring(expr,symbol_to_string,axioms); } else if (is_string_char_set_func(id)) { return of_string_char_set(expr,symbol_to_string,axioms); + } else if (is_string_copy_func(id)) { + return of_string_copy(expr,symbol_to_string,axioms); } } throw "non string function"; @@ -284,6 +286,18 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma } +void string_exprt::of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); //bad args to string copy + + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + axioms.emplace_back(equal_exprt(length(), s1.length())); + symbol_exprt idx = fresh_symbol("QA_index_copy",string_ref_typet::index_type()); + string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + axioms.push_back(a1.forall(idx, index_zero, s1.length())); +} + void string_exprt::of_string_substring (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 2156a8d9f10..f08bcfeeadc 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -109,6 +109,7 @@ class string_exprt : public struct_exprt { void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 86baac94dd4..9ac77778911 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -25,6 +25,7 @@ Date: September 2016 #define string_index_of_func "__CPROVER_uninterpreted_strindexof" #define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" #define string_literal_func "__CPROVER_uninterpreted_string_literal" +#define string_copy_func "__CPROVER_uninterpreted_string_copy" bool starts_with(std::string s, std::string t) { for(int i = 0; i < t.length(); i++) @@ -75,6 +76,9 @@ bool is_string_char_set_func(irep_idt id) { bool is_string_index_of_func(irep_idt id) { return (starts_with(id2string(id),string_index_of_func)); } +bool is_string_copy_func(irep_idt id) { + return (starts_with(id2string(id),string_copy_func)); +} bool is_string_last_index_of_func(irep_idt id) { return (starts_with(id2string(id),string_last_index_of_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 3e60f635b80..206d7bb2574 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -32,6 +32,7 @@ bool is_string_contains_func(irep_idt id); bool is_string_char_set_func(irep_idt id); bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); +bool is_string_copy_func(irep_idt id); #endif From 7cf5e6de87cc211a5aba3fb7061f7a3b98e8ea41 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sun, 11 Sep 2016 17:31:16 +0100 Subject: [PATCH 072/221] PASS preprocessing for indexOf and lastIndexOf --- regression/strings/cprover-string-hack.h | 1 + src/cbmc/cbmc_parse_options.cpp | 21 +++++++++++++++++++- src/goto-programs/pass_preprocess.cpp | 15 +++++++------- src/solvers/refinement/string_refinement.cpp | 16 +++++++++------ 4 files changed, 39 insertions(+), 14 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index fe3eb4bd287..1dc804051d7 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -62,4 +62,5 @@ extern __CPROVER_bool __CPROVER_uninterpreted_strcontains(__CPROVER_string str1, extern int __CPROVER_uninterpreted_strindexof(__CPROVER_string str, __CPROVER_char c); extern int __CPROVER_uninterpreted_strlastindexof(__CPROVER_string str, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, int pos, __CPROVER_char c); +extern __CPROVER_string __CPROVER_uninterpreted_string_copy(__CPROVER_string str); diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 85044fa606c..d244aeacde9 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -888,6 +888,10 @@ bool cbmc_parse_optionst::process_goto_program( << config.ansi_c.arch << ")" << eom; link_to_library(symbol_table, goto_functions, ui_message_handler); + debug () << "beggining" << eom; + show_goto_functions(ns, get_ui(), goto_functions); + + if(cmdline.isset("string-abstraction")) string_instrumentation( symbol_table, get_message_handler(), goto_functions); @@ -897,6 +901,8 @@ bool cbmc_parse_optionst::process_goto_program( remove_function_pointers(symbol_table, goto_functions, cmdline.isset("pointer-check")); remove_virtual_functions(symbol_table, goto_functions); + show_goto_functions(ns, get_ui(), goto_functions); + // full slice? if(cmdline.isset("full-slice")) @@ -916,9 +922,11 @@ bool cbmc_parse_optionst::process_goto_program( // remove returns, gcc vectors, complex remove_returns(symbol_table, goto_functions); + + remove_vector(symbol_table, goto_functions); remove_complex(symbol_table, goto_functions); - + // add generic checks status() << "Generic Property Instrumentation" << eom; goto_check(ns, options, goto_functions); @@ -939,6 +947,8 @@ bool cbmc_parse_optionst::process_goto_program( get_message_handler(), goto_functions); } + // for debuggin: show_goto_functions(ns, get_ui(), goto_functions); + // add failed symbols // needs to be done before pointer analysis add_failed_symbols(symbol_table); @@ -987,6 +997,15 @@ bool cbmc_parse_optionst::process_goto_program( // remove skips remove_skip(goto_functions); goto_functions.update(); + + // for debuggin: + show_goto_functions(ns, get_ui(), goto_functions); + + /* debug() << "DETAILS:" << eom; + Forall_goto_functions(it,goto_functions) + Forall_goto_program_instructions(it2,it->second.body){ + debug() << "program instruction: " << it2->code.pretty() << eom; + }*/ } catch(const char *e) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index fca44506f0e..b7164430f8a 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,13 +14,12 @@ Date: September 2016 #include "pass_preprocess.h" -#include +// #include // only for debugging #include void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt::instructionst::iterator & i_it, irep_idt function_name){ + goto_programt::instructionst::iterator & i_it, irep_idt function_name) { // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" - //to_symbol_expr(function_call.function()).set_identifier(irep_idt("__CPROVER_uninterpreted_string_char_at")); code_function_callt &function_call=to_code_function_call(i_it->code); @@ -33,6 +32,8 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f tmp_symbol.name=function_name; // tmp_symbol.type=type; symbol_table.add(tmp_symbol); + // make sure it is in the function map + goto_functions.function_map[irep_idt(function_name)]; //debug() << "we should replace the function call by function application?" << "see builtin_functions.cpp" << eom; @@ -47,8 +48,6 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); i_it->code=assignment; - // make sure it is in the function map - goto_functions.function_map[irep_idt(function_name)]; } void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functionst & goto_functions, @@ -130,6 +129,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strindexof"); + } else if(function_id == irep_idt("java::java.lang.String.lastIndexOf:(I)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlastindexof"); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { @@ -147,7 +148,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else { //std::cout << "processing a none function call " << i_it->code.pretty() << std::endl; if(i_it->is_assign()) { - std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; + //std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; code_assignt assignment = to_code_assign(i_it->code); exprt new_rhs = replace_string_literals(symbol_table,goto_functions,assignment.rhs()); code_assignt new_assignment(assignment.lhs(),new_rhs); @@ -176,7 +177,7 @@ exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & got if(has_java_string_type(expr) ) { if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) { std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); - std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; + //std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; if(id.substr(0,31) == "java::java.lang.String.Literal."){ function_application_exprt rhs; rhs.type()=expr.type(); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9807b2a9c35..28e2aa479f1 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -372,7 +372,7 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str string_exprt string_refinementt::make_string(const exprt & str) { - debug() << " make_string of " << str.pretty() << eom; + //debug() << " make_string of " << str.pretty() << eom; if(str.id()==ID_symbol) return string_of_symbol(to_symbol_expr(str)); @@ -462,7 +462,6 @@ bvt string_refinementt::convert_string_is_prefix and_exprt(s0 > witness, notequal_exprt(s0[witness],s1[witness])))); - debug() << "Warning: the generated axiom for prefix is not correct?" << eom; string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); @@ -598,7 +597,7 @@ bvt string_refinementt::convert_string_index_of( string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); - string_axioms.emplace_back(contains,equal_exprt(str[index],c)); + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); @@ -623,11 +622,15 @@ bvt string_refinementt::convert_string_last_index_of( symbol_exprt contains = fresh_boolean("contains_in_index_of"); string_exprt str = make_string(args[0]); exprt c = args[1]; - assert(c.type() == char_type || c.type() == java_char_type); + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); - string_axioms.emplace_back(contains,equal_exprt(str[index],c)); + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,index_of_int(1)),str.length())); @@ -1182,7 +1185,8 @@ string_constraintt string_refinementt::instantiate(const string_constraintt &axi exprt r = compute_subst(axiom.get_univ_var(), val, idx); exprt instance(axiom); replace_expr(axiom.get_univ_var(), r, instance); - exprt bounds = axiom.univ_within_bounds(); + // We are not sure the index set contains only positive numbers + exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(zero,ID_le,val)); replace_expr(axiom.get_univ_var(), r, bounds); return string_constraintt(bounds,instance); } From cddbb6cb606529d396cf1e635d1e257b233c3681 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sun, 11 Sep 2016 17:33:08 +0100 Subject: [PATCH 073/221] removed unecessary debugging information --- src/cbmc/cbmc_parse_options.cpp | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index d244aeacde9..ea00345900e 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -888,10 +888,6 @@ bool cbmc_parse_optionst::process_goto_program( << config.ansi_c.arch << ")" << eom; link_to_library(symbol_table, goto_functions, ui_message_handler); - debug () << "beggining" << eom; - show_goto_functions(ns, get_ui(), goto_functions); - - if(cmdline.isset("string-abstraction")) string_instrumentation( symbol_table, get_message_handler(), goto_functions); @@ -901,8 +897,6 @@ bool cbmc_parse_optionst::process_goto_program( remove_function_pointers(symbol_table, goto_functions, cmdline.isset("pointer-check")); remove_virtual_functions(symbol_table, goto_functions); - show_goto_functions(ns, get_ui(), goto_functions); - // full slice? if(cmdline.isset("full-slice")) @@ -947,8 +941,6 @@ bool cbmc_parse_optionst::process_goto_program( get_message_handler(), goto_functions); } - // for debuggin: show_goto_functions(ns, get_ui(), goto_functions); - // add failed symbols // needs to be done before pointer analysis add_failed_symbols(symbol_table); @@ -998,14 +990,6 @@ bool cbmc_parse_optionst::process_goto_program( remove_skip(goto_functions); goto_functions.update(); - // for debuggin: - show_goto_functions(ns, get_ui(), goto_functions); - - /* debug() << "DETAILS:" << eom; - Forall_goto_functions(it,goto_functions) - Forall_goto_program_instructions(it2,it->second.body){ - debug() << "program instruction: " << it2->code.pretty() << eom; - }*/ } catch(const char *e) From 19f5172d29e555b2684df166153d4556bfc16d54 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Sep 2016 10:30:16 +0100 Subject: [PATCH 074/221] Substring method and more tests --- regression/strings/java_equal/test.desc | 8 +++ .../strings/java_equal/test_equal.class | Bin 0 -> 726 bytes regression/strings/java_equal/test_equal.java | 10 +++ .../strings/java_index_of/condition-cprog.txt | 20 ++++++ .../java_index_of/condition-javaprog.txt | 63 ++++++++++++++++ regression/strings/java_index_of/test.desc | 10 +++ .../strings/java_index_of/test_index_of.class | Bin 0 -> 794 bytes .../strings/java_index_of/test_index_of.java | 16 +++++ regression/strings/java_strlen/test.desc | 8 +++ .../strings/java_strlen/test_length.class | Bin 0 -> 864 bytes .../strings/java_strlen/test_length.java | 14 ++++ .../java_substring/test_substring.class | Bin 0 -> 814 bytes .../java_substring/test_substring.java | 16 +++++ src/goto-programs/pass_preprocess.cpp | 5 +- src/solvers/refinement/string_expr.cpp | 67 +++++++++++++++--- src/solvers/refinement/string_expr.h | 3 + src/solvers/refinement/string_refinement.cpp | 6 +- 17 files changed, 233 insertions(+), 13 deletions(-) create mode 100644 regression/strings/java_equal/test.desc create mode 100644 regression/strings/java_equal/test_equal.class create mode 100644 regression/strings/java_equal/test_equal.java create mode 100644 regression/strings/java_index_of/condition-cprog.txt create mode 100644 regression/strings/java_index_of/condition-javaprog.txt create mode 100644 regression/strings/java_index_of/test.desc create mode 100644 regression/strings/java_index_of/test_index_of.class create mode 100644 regression/strings/java_index_of/test_index_of.java create mode 100644 regression/strings/java_strlen/test.desc create mode 100644 regression/strings/java_strlen/test_length.class create mode 100644 regression/strings/java_strlen/test_length.java create mode 100644 regression/strings/java_substring/test_substring.class create mode 100644 regression/strings/java_substring/test_substring.java diff --git a/regression/strings/java_equal/test.desc b/regression/strings/java_equal/test.desc new file mode 100644 index 00000000000..6375cfdc3d8 --- /dev/null +++ b/regression/strings/java_equal/test.desc @@ -0,0 +1,8 @@ +CORE +test_equal.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_equal.java line 7: FAILURE$ +^\[assertion.2\] assertion at file test_equal.java line 8: SUCCESS$ +-- diff --git a/regression/strings/java_equal/test_equal.class b/regression/strings/java_equal/test_equal.class new file mode 100644 index 0000000000000000000000000000000000000000..26ee19e6cb16d81855e5204569a842332489e8e1 GIT binary patch literal 726 zcmZuvO>fgc5PjqLD_aMLgtVbhpdUceCiH+fwL+j2PH8y=A+;QkldP&Ou3c=0f54x} zAK(l~jYK85^P?(e9oncBlC?8CZ|1$3S^qiz`3t~Pv;;gXI=JKFu7H6h7x#(~xUVk{ z94rgC8eb7u#hQbMgz8$5rZUM?9Hl!d4f>%R66kvaU&k2P_^BuwL#6wB&yDE}< zqvO6z-s)rqjsq1D<{R(3N5SV{GYq1`&0dzM=x|FHmU>w*__!OKqZdM#mEwbkT}`7`ZK$ZO@L3}vbkIlOFzcae=4 z;GG^|nV-hvhof>`PrzOQ%z`qXH~F^2me^YB6VNxEhzg%}9wZb|#Vz)A>K86G+3uXd z*sl~OFuS>DvA0{X_P)a&qq@;Lg)_$78QlE|iod7PR{LsHD;c@cB5Q$p1uRywu>c2c z{)IZMU1P+DagMfw`RP|zIjjsRz literal 0 HcmV?d00001 diff --git a/regression/strings/java_equal/test_equal.java b/regression/strings/java_equal/test_equal.java new file mode 100644 index 00000000000..151162a106d --- /dev/null +++ b/regression/strings/java_equal/test_equal.java @@ -0,0 +1,10 @@ +public class test_equal { + + public static void main(String[] argv) { + String s = new String("pi"); + String t = new String("po"); + String u = "po"; + assert(s.equals(t)); + assert(t.equals(u)); + } +} diff --git a/regression/strings/java_index_of/condition-cprog.txt b/regression/strings/java_index_of/condition-cprog.txt new file mode 100644 index 00000000000..90f0a1736a1 --- /dev/null +++ b/regression/strings/java_index_of/condition-cprog.txt @@ -0,0 +1,20 @@ +Parsing ../test_index_of/test2.c +VERIFICATION CONDITIONS: + +file ../test_index_of/test2.c line 11 function main +assertion i == 6 +{-12} s!0@1#2 == __CPROVER_uninterpreted_string_literal((const void *)"H") +{-13} i!0@1#2 == __CPROVER_uninterpreted_strindexof(s!0@1#2, 111) +{-14} j!0@1#2 == __CPROVER_uninterpreted_strlastindexof(s!0@1#2, 111) +|-------------------------- +{1} i!0@1#2 == 6 + +file ../test_index_of/test2.c line 12 function main +assertion j == 4 +{-12} s!0@1#2 == __CPROVER_uninterpreted_string_literal((const void *)"H") +{-13} i!0@1#2 == __CPROVER_uninterpreted_strindexof(s!0@1#2, 111) +{-14} j!0@1#2 == __CPROVER_uninterpreted_strlastindexof(s!0@1#2, 111) +{-15} \guard#1 == (i!0@1#2 == 6) +|-------------------------- +{1} j!0@1#2 == 4 + diff --git a/regression/strings/java_index_of/condition-javaprog.txt b/regression/strings/java_index_of/condition-javaprog.txt new file mode 100644 index 00000000000..0d758f21faf --- /dev/null +++ b/regression/strings/java_index_of/condition-javaprog.txt @@ -0,0 +1,63 @@ +Parsing test_index_of.class +Java main class: test_index_of +VERIFICATION CONDITIONS: +file test_index_of.java line 9 +assertion at file test_index_of.java line 9 +{-3} return_tmp0!0#2 == nondet_symbol(symex::nondet0) +{-4} \guard#1 == ((signed int)return_tmp0!0#2 == 0) +{-5} $stack_tmp1!0#2 == 1 +{-6} $stack_tmp1!0#3 == $stack_tmp1!0#1 +{-7} $stack_tmp1!0#4 == 0 +{-8} $stack_tmp1!0#5 == (\guard#1 ? 1 : 0) +{-10} tmp_object_factory$1!0#1 == tmp_object_factory$1!0#0 WITH [.@java.lang.Object:=tmp_object_factory$1!0#0.@java.lang.Object WITH [.@class_identifier:="java::array[reference]"]] +{-11} tmp_object_factory$1!0#2 == tmp_object_factory$1!0#1 WITH [.length:=nondet_symbol(symex::nondet1)] +{-12} arg0a!0#1 == &tmp_object_factory$1!0 +{-13} local1a#1 == __CPROVER_uninterpreted_string_literal#0(&java.lang.String.Literal.H) +{-14} local2i#1 == 111 +{-15} return_tmp0!0#2 == __CPROVER_uninterpreted_strindexof#0(local1a#1, 111) +{-16} local3i#1 == return_tmp0!0#2 +{-17} return_tmp1!0#2 == __CPROVER_uninterpreted_strlastindexof#0(local1a#1, 111) +{-18} local4i#1 == return_tmp1!0#2 +{-19} \guard#2 == !(test_index_of.$assertionsDisabled#2 != FALSE) +{-20} \guard#3 == !(local3i#1 == 6) +{-21} new_tmp2!0#2 == &dynamic_object1 +{-22} dynamic_object1#1 == { .@class_identifier="java::java.lang.AssertionError" } +|-------------------------- +{1} !(\guard#2 && \guard#3) + +file test_index_of.java line 10 +assertion at file test_index_of.java line 10 +{-1} __CPROVER_rounding_mode!0#1 == 0 +{-2} test_index_of.$assertionsDisabled#1 == FALSE +{-3} return_tmp0!0#2 == nondet_symbol(symex::nondet0) +{-4} \guard#1 == ((signed int)return_tmp0!0#2 == 0) +{-5} $stack_tmp1!0#2 == 1 +{-6} $stack_tmp1!0#3 == $stack_tmp1!0#1 +{-7} $stack_tmp1!0#4 == 0 +{-8} $stack_tmp1!0#5 == (\guard#1 ? 1 : 0) +{-9} test_index_of.$assertionsDisabled#2 == !($stack_tmp1!0#5 == 0) +{-10} tmp_object_factory$1!0#1 == tmp_object_factory$1!0#0 WITH [.@java.lang.Object:=tmp_object_factory$1!0#0.@java.lang.Object WITH [.@class_identifier:="java::array[reference]"]] +{-11} tmp_object_factory$1!0#2 == tmp_object_factory$1!0#1 WITH [.length:=nondet_symbol(symex::nondet1)] +{-12} arg0a!0#1 == &tmp_object_factory$1!0 +{-13} local1a#1 == __CPROVER_uninterpreted_string_literal#0(&java.lang.String.Literal.H) +{-14} local2i#1 == 111 +{-15} return_tmp0!0#2 == __CPROVER_uninterpreted_strindexof#0(local1a#1, 111) +{-16} local3i#1 == return_tmp0!0#2 +{-17} return_tmp1!0#2 == __CPROVER_uninterpreted_strlastindexof#0(local1a#1, 111) +{-18} local4i#1 == return_tmp1!0#2 +{-19} \guard#2 == !(test_index_of.$assertionsDisabled#2 != FALSE) +{-20} \guard#3 == !(local3i#1 == 6) +{-21} new_tmp2!0#2 == &dynamic_object1 +{-22} dynamic_object1#1 == { .@class_identifier="java::java.lang.AssertionError" } +{-23} !(\guard#2 && \guard#3) +{-24} dynamic_object1#2 == (\guard#3 ? { .@class_identifier="java::java.lang.AssertionError" } : dynamic_object1#0) +{-25} new_tmp2!0#3 == (\guard#3 ? &dynamic_object1 : new_tmp2!0#1) +{-26} dynamic_object1#3 == (\guard#2 ? dynamic_object1#2 : dynamic_object1#0) +{-27} new_tmp2!0#4 == (\guard#2 ? new_tmp2!0#3 : new_tmp2!0#1) +{-28} \guard#4 == !(test_index_of.$assertionsDisabled#2 != FALSE) +{-29} \guard#5 == !(local4i#1 == 4) +{-30} new_tmp3!0#2 == &dynamic_object2 +{-31} dynamic_object2#1 == { .@class_identifier="java::java.lang.AssertionError" } +|-------------------------- +{1} !(\guard#4 && \guard#5) + diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc new file mode 100644 index 00000000000..d89d7eaf8cd --- /dev/null +++ b/regression/strings/java_index_of/test.desc @@ -0,0 +1,10 @@ +CORE +test_index_of.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_index_of.java line 8: SUCCESS$ +^\[assertion.2\] assertion at file test_index_of.java line 9: SUCCESS$ +^\[assertion.3\] assertion at file test_index_of.java line 12: FAILURE$ +^\[assertion.4\] assertion at file test_index_of.java line 14: FAILURE$ +-- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class new file mode 100644 index 0000000000000000000000000000000000000000..61a7adfefa23a55af23c048c88bcae8b81f4851b GIT binary patch literal 794 zcmZuuO>fgc6r4?Luj4q4ahi}q11YpLABY|hTnH6VKtu}k5I#gXR8G9DoVqr$9mH?x zg&vSN15zr1R3wi4DB!K34Hdn-wcndJJ2U&^=a)kO*KyT=fjJ%L44lWjEVUeTT;RB9 zK*JnI-M|7aaa?97Ejn>5qQnb>_`VlA17EldY=c4Tc!8I!GGrUg=M2hP=n95n&kMwp z@$NuGPbHWJyN(wyR2r{(Bj=5?;yc0iNm4gt!t9eL;*7l<|E+c?UdJsinL>f-8ax_h}&}OivE9--i7$y|RDK<_3|5#(-smS#$N}$ngb{X=%6DM7% zTsDhS>NOg~l#nZ8FB0ytI0_~i(|`irpa;?E*#Kr$r5*apf`ns+YLWhGbTT^C)&bZ@ z34}#eOPdTioPkZ>68aq(sC4ewnVuEiZqHAUU2R+81jj}~ Gs{RIsIh!&7 literal 0 HcmV?d00001 diff --git a/regression/strings/java_index_of/test_index_of.java b/regression/strings/java_index_of/test_index_of.java new file mode 100644 index 00000000000..5b9680c6c79 --- /dev/null +++ b/regression/strings/java_index_of/test_index_of.java @@ -0,0 +1,16 @@ +public class test_index_of { + + public static void main(String[] argv) { + String s = "Hello World!"; + char c = 'o'; + int i = s.indexOf(c); + int j = s.lastIndexOf('o'); + assert(i == 4); + assert(j == 7); + + if(argv.length > 1) + assert(i != 4); + else + assert(j != 7); + } +} diff --git a/regression/strings/java_strlen/test.desc b/regression/strings/java_strlen/test.desc new file mode 100644 index 00000000000..78007186493 --- /dev/null +++ b/regression/strings/java_strlen/test.desc @@ -0,0 +1,8 @@ +CORE +test_length.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_length.java line 10: SUCCESS$ +^\[assertion.2\] assertion at file test_length.java line 11: FAILURE$ +-- diff --git a/regression/strings/java_strlen/test_length.class b/regression/strings/java_strlen/test_length.class new file mode 100644 index 0000000000000000000000000000000000000000..7f1c10c02ca3c0b61fb85561752aa7e23c0b36f2 GIT binary patch literal 864 zcmZuvU2hUW6g{)-7t3NPNTn*;D&j)1XsbSGZEUb6O{gYfOj;kzvP@v>cGv7K{+Pb_ zV&bzJA+bq)_eWXpP$^YOcJIubIrrWcl!+6@C`+|*z(Km<~A3FT0E2?E;9>s4w?swzfvZ!YwgIU7=t<9kHxaS38ziMI$H50e6Y@&|a zCeC4op)kqW7>nEt!ysfxooS=tj)@hl{?+7pdyhLY`7=coL*AOMRXsWQ$g?f7&@<(h| z<(2K)0Lpr8X#n+sJTDgq(C#Z=pdTQcS2Dd1NF5@%GlcQu6b#OQqOmk;T&9+Q3 1) { + String t = argv[1]; + int i = t.length(); + String u = t.concat(s); + char c = u.charAt(i); + assert(c == 'h'); + assert(c == 'o'); + } + } +} diff --git a/regression/strings/java_substring/test_substring.class b/regression/strings/java_substring/test_substring.class new file mode 100644 index 0000000000000000000000000000000000000000..943a33264e8927e2df8381bf442bf46daba061ec GIT binary patch literal 814 zcmZuu-EY!R6#reg?JZqlY`6(i#E&_l-A1BuFD{D&T|&Y%5nbYZFa>T{Co85c{xN&; zWr@#f0*NN`-9Kvc+$!LrNptS$x#yhU$NhQ!?F_&JR85#Dm{`Fz6|SpLOu@hnfszRw z1%aC;ZsE4T9fsVh8-_B7yn!D+@j|!Vmt6*Sz@Tq?z8CElQY!$&j7RJZ~S#PDH@}p?|6IwB=gN}XJs;n(~005sZ_p%=*RR06pc4e5g1KcLq#=v4uh%`4HAB|*+2Lvfz|igYqM zHG2&9Sv4X{QICtn5erzPT(ypARHt*_KI5l&Ve|V 1) { + String t = argv[1]; + if(t.length() > 5) { + String u = t.substring(2,4); + char c = u.charAt(1); + char d = t.charAt(3); + char e = t.charAt(4); + assert(c == d); + assert(c == e); + } + } + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b7164430f8a..6e2318bc1e1 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,7 +14,7 @@ Date: September 2016 #include "pass_preprocess.h" -// #include // only for debugging +#include // only for debugging #include void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, @@ -22,6 +22,7 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" //to_symbol_expr(function_call.function()).set_identifier(irep_idt("__CPROVER_uninterpreted_string_char_at")); + std::cout << "Warning: in pass_preprocess::make_string_function: we should introduce an intermediary variable for each argument" << std::endl; code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -141,6 +142,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_startswith"); } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); + } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 6a1858451ba..cd743b276ff 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -49,6 +49,7 @@ string_ref_typet::string_ref_typet(unsignedbv_typet char_type) : struct_typet() components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; + std::cout << "string_ref_typet() --> " << this->pretty() << std::endl; } exprt index_zero = string_ref_typet::index_zero(); @@ -81,13 +82,18 @@ bool string_ref_typet::is_java_string_type(const typet &type) if(subtype.id() == ID_struct) { irep_idt tag = to_struct_type(subtype).get_tag(); return (tag == irep_idt("java.lang.String")); - } else return false; + } + else { + std::cout << "string_ref_typet::is_java_string_type: warning: incomplete string type" << std::endl; + return true; + } } else return false; } string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; + std::cout << "string_exprt::string_exprt(): warning: initializing a string expression without knowing its type" << std::endl; if(string_language_mode == USE_JAVA_STRINGS) t = string_ref_typet(string_ref_typet::java_char_type()); symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); @@ -95,14 +101,13 @@ string_exprt::string_exprt() : struct_exprt(string_ref_typet()) move_to_operands(length,content); } -string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref_typet()) +string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref_typet(char_type)) { string_ref_typet t(char_type); - if(char_type == string_ref_typet::java_char_type()) - ensure_java_strings(); symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); + std::cout << "string_exprt::string_exprt()-> " << this->pretty() << std::endl; } /* @@ -136,21 +141,60 @@ symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar],f[qvar])).forall(qvar2,index_zero,f.length())); } + +string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { + std::cout << "get_string_of_symbol : " << sym.pretty() << std::endl; + + if(string_ref_typet::is_java_string_type(sym.type())) { + irep_idt id = sym.get_identifier(); + std::map::iterator f = symbol_to_string.find(id); + if(f == symbol_to_string.end()) { + symbol_to_string[id]= string_exprt(string_ref_typet::java_char_type()); + return symbol_to_string[id]; + } else return f->second; + } + else { + irep_idt id = sym.get_identifier(); + std::map::iterator f = symbol_to_string.find(id); + if(f == symbol_to_string.end()) { + symbol_to_string[id]= string_exprt(string_ref_typet::char_type()); + return symbol_to_string[id]; + } else return f->second; + } +} + string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) { - string_exprt s; - if(string_ref_typet::is_java_string_type(unrefined_string.type())) - s = string_exprt(string_ref_typet::java_char_type()); + unsignedbv_typet char_type; + if(!string_ref_typet::is_unrefined_string_type(unrefined_string.type())) { + std::cout << "string_exprt::of_expr: wrong type for expression " + << unrefined_string.pretty() << std::endl; + assert(false); + } + + if(string_ref_typet::is_java_string_type(unrefined_string.type())) { + std::cout << "string_exprt::of_expr(java_string)" << std::endl; + char_type = string_ref_typet::java_char_type(); + } else { + std::cout << "string_exprt::of_expr(c_string)" << std::endl; + char_type = string_ref_typet::char_type(); + } + + string_exprt s(char_type); + + + std::cout << "string_exprt::of_expr(" << unrefined_string.pretty() << ")" << std::endl << "--> s = " + << s.pretty() << std::endl; if(unrefined_string.id()==ID_function_application) s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); else if(unrefined_string.id()==ID_symbol) - s = symbol_to_string[to_symbol_expr(unrefined_string).get_identifier()]; + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); else if(unrefined_string.id()==ID_nondet_symbol) - s = symbol_to_string[unrefined_string.get(ID_identifier)]; + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); else if(unrefined_string.id()==ID_address_of) { assert(unrefined_string.op0().id()==ID_symbol); - s = symbol_to_string[to_symbol_expr(unrefined_string.op0()).get_identifier()]; + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); } else if(unrefined_string.id()==ID_if) s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); @@ -304,7 +348,10 @@ void string_exprt::of_string_substring const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 3); // bad args to string substring? + std::cout << "of_string_substring(" << args[0].pretty() << ")" << std::endl; string_exprt str = of_expr(args[0],symbol_to_string,axioms); + + std::cout << "gives str = (" << str.pretty() << ")" << std::endl; exprt i(args[1]); assert(i.type() == string_ref_typet::index_type()); exprt j(args[2]); diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index f08bcfeeadc..db9af8e3c91 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -64,6 +64,9 @@ class string_exprt : public struct_exprt { // equal to the given expression. static string_exprt of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms); + // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string + static string_exprt get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym); + // Generate a new symbol of the given type tp with a prefix static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 28e2aa479f1..23a042df5a3 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -357,8 +357,10 @@ string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ s.of_string_constant(string_exprt::extract_java_string(sym),JAVA_CHAR_WIDTH,string_ref_typet::java_char_type(),string_axioms); return s; } - else - return symbol_to_string[sym.get_identifier()]; + else { + return string_exprt::get_string_of_symbol(symbol_to_string,sym); + } + //return symbol_to_string[sym.get_identifier()]; } From 9635737608c1c0ce4f0b68a576c5970d1d126279 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Sep 2016 12:07:20 +0100 Subject: [PATCH 075/221] corrected a confusion between c strings and java strings in the case of pointers --- .../strings/java_index_of/condition-cprog.txt | 20 ------ .../java_index_of/condition-javaprog.txt | 63 ------------------- regression/strings/java_substring/test.desc | 8 +++ src/solvers/refinement/string_expr.cpp | 28 ++++----- 4 files changed, 20 insertions(+), 99 deletions(-) delete mode 100644 regression/strings/java_index_of/condition-cprog.txt delete mode 100644 regression/strings/java_index_of/condition-javaprog.txt create mode 100644 regression/strings/java_substring/test.desc diff --git a/regression/strings/java_index_of/condition-cprog.txt b/regression/strings/java_index_of/condition-cprog.txt deleted file mode 100644 index 90f0a1736a1..00000000000 --- a/regression/strings/java_index_of/condition-cprog.txt +++ /dev/null @@ -1,20 +0,0 @@ -Parsing ../test_index_of/test2.c -VERIFICATION CONDITIONS: - -file ../test_index_of/test2.c line 11 function main -assertion i == 6 -{-12} s!0@1#2 == __CPROVER_uninterpreted_string_literal((const void *)"H") -{-13} i!0@1#2 == __CPROVER_uninterpreted_strindexof(s!0@1#2, 111) -{-14} j!0@1#2 == __CPROVER_uninterpreted_strlastindexof(s!0@1#2, 111) -|-------------------------- -{1} i!0@1#2 == 6 - -file ../test_index_of/test2.c line 12 function main -assertion j == 4 -{-12} s!0@1#2 == __CPROVER_uninterpreted_string_literal((const void *)"H") -{-13} i!0@1#2 == __CPROVER_uninterpreted_strindexof(s!0@1#2, 111) -{-14} j!0@1#2 == __CPROVER_uninterpreted_strlastindexof(s!0@1#2, 111) -{-15} \guard#1 == (i!0@1#2 == 6) -|-------------------------- -{1} j!0@1#2 == 4 - diff --git a/regression/strings/java_index_of/condition-javaprog.txt b/regression/strings/java_index_of/condition-javaprog.txt deleted file mode 100644 index 0d758f21faf..00000000000 --- a/regression/strings/java_index_of/condition-javaprog.txt +++ /dev/null @@ -1,63 +0,0 @@ -Parsing test_index_of.class -Java main class: test_index_of -VERIFICATION CONDITIONS: -file test_index_of.java line 9 -assertion at file test_index_of.java line 9 -{-3} return_tmp0!0#2 == nondet_symbol(symex::nondet0) -{-4} \guard#1 == ((signed int)return_tmp0!0#2 == 0) -{-5} $stack_tmp1!0#2 == 1 -{-6} $stack_tmp1!0#3 == $stack_tmp1!0#1 -{-7} $stack_tmp1!0#4 == 0 -{-8} $stack_tmp1!0#5 == (\guard#1 ? 1 : 0) -{-10} tmp_object_factory$1!0#1 == tmp_object_factory$1!0#0 WITH [.@java.lang.Object:=tmp_object_factory$1!0#0.@java.lang.Object WITH [.@class_identifier:="java::array[reference]"]] -{-11} tmp_object_factory$1!0#2 == tmp_object_factory$1!0#1 WITH [.length:=nondet_symbol(symex::nondet1)] -{-12} arg0a!0#1 == &tmp_object_factory$1!0 -{-13} local1a#1 == __CPROVER_uninterpreted_string_literal#0(&java.lang.String.Literal.H) -{-14} local2i#1 == 111 -{-15} return_tmp0!0#2 == __CPROVER_uninterpreted_strindexof#0(local1a#1, 111) -{-16} local3i#1 == return_tmp0!0#2 -{-17} return_tmp1!0#2 == __CPROVER_uninterpreted_strlastindexof#0(local1a#1, 111) -{-18} local4i#1 == return_tmp1!0#2 -{-19} \guard#2 == !(test_index_of.$assertionsDisabled#2 != FALSE) -{-20} \guard#3 == !(local3i#1 == 6) -{-21} new_tmp2!0#2 == &dynamic_object1 -{-22} dynamic_object1#1 == { .@class_identifier="java::java.lang.AssertionError" } -|-------------------------- -{1} !(\guard#2 && \guard#3) - -file test_index_of.java line 10 -assertion at file test_index_of.java line 10 -{-1} __CPROVER_rounding_mode!0#1 == 0 -{-2} test_index_of.$assertionsDisabled#1 == FALSE -{-3} return_tmp0!0#2 == nondet_symbol(symex::nondet0) -{-4} \guard#1 == ((signed int)return_tmp0!0#2 == 0) -{-5} $stack_tmp1!0#2 == 1 -{-6} $stack_tmp1!0#3 == $stack_tmp1!0#1 -{-7} $stack_tmp1!0#4 == 0 -{-8} $stack_tmp1!0#5 == (\guard#1 ? 1 : 0) -{-9} test_index_of.$assertionsDisabled#2 == !($stack_tmp1!0#5 == 0) -{-10} tmp_object_factory$1!0#1 == tmp_object_factory$1!0#0 WITH [.@java.lang.Object:=tmp_object_factory$1!0#0.@java.lang.Object WITH [.@class_identifier:="java::array[reference]"]] -{-11} tmp_object_factory$1!0#2 == tmp_object_factory$1!0#1 WITH [.length:=nondet_symbol(symex::nondet1)] -{-12} arg0a!0#1 == &tmp_object_factory$1!0 -{-13} local1a#1 == __CPROVER_uninterpreted_string_literal#0(&java.lang.String.Literal.H) -{-14} local2i#1 == 111 -{-15} return_tmp0!0#2 == __CPROVER_uninterpreted_strindexof#0(local1a#1, 111) -{-16} local3i#1 == return_tmp0!0#2 -{-17} return_tmp1!0#2 == __CPROVER_uninterpreted_strlastindexof#0(local1a#1, 111) -{-18} local4i#1 == return_tmp1!0#2 -{-19} \guard#2 == !(test_index_of.$assertionsDisabled#2 != FALSE) -{-20} \guard#3 == !(local3i#1 == 6) -{-21} new_tmp2!0#2 == &dynamic_object1 -{-22} dynamic_object1#1 == { .@class_identifier="java::java.lang.AssertionError" } -{-23} !(\guard#2 && \guard#3) -{-24} dynamic_object1#2 == (\guard#3 ? { .@class_identifier="java::java.lang.AssertionError" } : dynamic_object1#0) -{-25} new_tmp2!0#3 == (\guard#3 ? &dynamic_object1 : new_tmp2!0#1) -{-26} dynamic_object1#3 == (\guard#2 ? dynamic_object1#2 : dynamic_object1#0) -{-27} new_tmp2!0#4 == (\guard#2 ? new_tmp2!0#3 : new_tmp2!0#1) -{-28} \guard#4 == !(test_index_of.$assertionsDisabled#2 != FALSE) -{-29} \guard#5 == !(local4i#1 == 4) -{-30} new_tmp3!0#2 == &dynamic_object2 -{-31} dynamic_object2#1 == { .@class_identifier="java::java.lang.AssertionError" } -|-------------------------- -{1} !(\guard#4 && \guard#5) - diff --git a/regression/strings/java_substring/test.desc b/regression/strings/java_substring/test.desc new file mode 100644 index 00000000000..a9384d0f25c --- /dev/null +++ b/regression/strings/java_substring/test.desc @@ -0,0 +1,8 @@ +CORE +test_substring.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_substring.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_substring.java line 12: FAILURE$ +-- diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index cd743b276ff..03c786349e2 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -84,8 +84,9 @@ bool string_ref_typet::is_java_string_type(const typet &type) return (tag == irep_idt("java.lang.String")); } else { - std::cout << "string_ref_typet::is_java_string_type: warning: incomplete string type" << std::endl; - return true; + std::cout << "string_ref_typet::is_java_string_type: warning: incomplete string type " + << type.pretty() << std::endl; + return false; } } else return false; } @@ -145,39 +146,34 @@ symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { std::cout << "get_string_of_symbol : " << sym.pretty() << std::endl; - if(string_ref_typet::is_java_string_type(sym.type())) { + if(string_ref_typet::is_c_string_type(sym.type())) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(string_ref_typet::java_char_type()); + symbol_to_string[id]= string_exprt(string_ref_typet::char_type()); return symbol_to_string[id]; } else return f->second; - } - else { + } else { // otherwise we assume it is a java string irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(string_ref_typet::char_type()); + symbol_to_string[id]= string_exprt(string_ref_typet::java_char_type()); return symbol_to_string[id]; } else return f->second; } + } string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) { unsignedbv_typet char_type; - if(!string_ref_typet::is_unrefined_string_type(unrefined_string.type())) { - std::cout << "string_exprt::of_expr: wrong type for expression " - << unrefined_string.pretty() << std::endl; - assert(false); - } - if(string_ref_typet::is_java_string_type(unrefined_string.type())) { - std::cout << "string_exprt::of_expr(java_string)" << std::endl; - char_type = string_ref_typet::java_char_type(); - } else { + if(string_ref_typet::is_c_string_type(unrefined_string.type())) { std::cout << "string_exprt::of_expr(c_string)" << std::endl; char_type = string_ref_typet::char_type(); + } else { + std::cout << "string_exprt::of_expr(java_string)" << std::endl; + char_type = string_ref_typet::java_char_type(); } string_exprt s(char_type); From 4061517ef98bec88df136ac4d700eabdddc5ce27 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Sep 2016 12:12:32 +0100 Subject: [PATCH 076/221] regression test for java endsWith method --- regression/strings/java_suffix/test.desc | 8 ++++++++ regression/strings/java_suffix/test_suffix.class | Bin 0 -> 811 bytes regression/strings/java_suffix/test_suffix.java | 15 +++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 regression/strings/java_suffix/test.desc create mode 100644 regression/strings/java_suffix/test_suffix.class create mode 100644 regression/strings/java_suffix/test_suffix.java diff --git a/regression/strings/java_suffix/test.desc b/regression/strings/java_suffix/test.desc new file mode 100644 index 00000000000..f9472f03b47 --- /dev/null +++ b/regression/strings/java_suffix/test.desc @@ -0,0 +1,8 @@ +CORE +test_suffix.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_suffix.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_suffix.java line 13: FAILURE$ +-- diff --git a/regression/strings/java_suffix/test_suffix.class b/regression/strings/java_suffix/test_suffix.class new file mode 100644 index 0000000000000000000000000000000000000000..557acd02653a0558f2ddb5117649f5cdd387e77e GIT binary patch literal 811 zcmZ`%(M}UV6g|^!JKOD+*4APbixf}`1*#H#kq`)Kd?@-*V*@^zZFj)IW!LOZjUV9` z^ap%alQxk=-~A}{&ZbZ_m~8IcJ#*&XbMDN~U*En1SjW1BDO5RTP28}Mz?_MiiFuta z=&+c9jhh^|ELfU%+d>^n9Lo%)MJI|xsAS+rk7VR@J>fF2eTMXg^rhNlNY5FImIq#jO=lF-swhE z$zX2uym5W29rVMVcp`PRf)bH>9rX_mGH=qZ}n1x^{t^^5(R z!gr&NRB!%6p;23razZsGIk%LKC7Bi%HmHxI!_Z8YL zBk`Mn6i0>QDt(Of7KwcA%*6dzEukgYL*xeF#wQrbugFYVojTGbQ%K~twC|Z%$@M>U CNTL-0 literal 0 HcmV?d00001 diff --git a/regression/strings/java_suffix/test_suffix.java b/regression/strings/java_suffix/test_suffix.java new file mode 100644 index 00000000000..f61b0b8ba36 --- /dev/null +++ b/regression/strings/java_suffix/test_suffix.java @@ -0,0 +1,15 @@ +public class test_suffix { + + public static void main(String[] argv) { + String s = new String("Hello World!"); + //String t = new String("Hello"); + //String u = new String("Wello"); + String u = "Wello!"; + boolean b = s.endsWith("World!"); + //boolean c = s.startsWith("Wello"); + //boolean b = s.startsWith(t); + boolean c = s.startsWith(u); + assert(b); + assert(c); + } +} From 32d997ead8f845bad5bbf0a3209581d94b253752 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Sep 2016 12:23:42 +0100 Subject: [PATCH 077/221] added java contains string method --- regression/strings/java_contains/test.desc | 8 ++++++++ .../strings/java_contains/test_contains.class | Bin 0 -> 753 bytes .../strings/java_contains/test_contains.java | 10 ++++++++++ src/goto-programs/pass_preprocess.cpp | 2 ++ src/solvers/refinement/string_refinement.cpp | 5 +++-- 5 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 regression/strings/java_contains/test.desc create mode 100644 regression/strings/java_contains/test_contains.class create mode 100644 regression/strings/java_contains/test_contains.java diff --git a/regression/strings/java_contains/test.desc b/regression/strings/java_contains/test.desc new file mode 100644 index 00000000000..7fb54c98b24 --- /dev/null +++ b/regression/strings/java_contains/test.desc @@ -0,0 +1,8 @@ +CORE +test_contains.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_contains.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_contains.java line 13: FAILURE$ +-- diff --git a/regression/strings/java_contains/test_contains.class b/regression/strings/java_contains/test_contains.class new file mode 100644 index 0000000000000000000000000000000000000000..855ab8283937fc861ae4056ff12dcb2427fd2d8e GIT binary patch literal 753 zcmZuvO>fgc5Pj=7vEw)-bw~*N@oQ3&;R5-+ z5v-qA*|q7clF(9#IT8U8TF8>a9CFrd1?l+Y6mQnx! literal 0 HcmV?d00001 diff --git a/regression/strings/java_contains/test_contains.java b/regression/strings/java_contains/test_contains.java new file mode 100644 index 00000000000..fce2ee63047 --- /dev/null +++ b/regression/strings/java_contains/test_contains.java @@ -0,0 +1,10 @@ +public class test_contains { + + public static void main(String[] argv) { + String s = new String("Hello World!"); + String u = "o W"; + String t = "W o"; + assert(s.contains(u)); + assert(s.contains(t)); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 6e2318bc1e1..d341a2da6a1 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -144,6 +144,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); + } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 23a042df5a3..a6d108f29a3 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -521,8 +521,10 @@ bvt string_refinementt::convert_string_contains( { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); // bad args to string contains? + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt contains = fresh_boolean("contains"); + typecast_exprt tc_contains(contains,f.type()); string_exprt s0 = make_string(args[0]); string_exprt s1 = make_string(args[1]); @@ -556,8 +558,7 @@ bvt string_refinementt::convert_string_contains( (zero,plus_exprt(index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); - assert(f.type() == bool_typet()); - return convert_bv(contains); + return convert_bv(tc_contains); } From d4cee5982029b144f7c6c2fe8d72a0e3f7f7d11e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 10:56:01 +0100 Subject: [PATCH 078/221] cleaning the code by removing some debugging information that were using std::cout --- regression/strings/java_contains/test.desc | 4 +- src/goto-programs/pass_preprocess.cpp | 22 +--------- src/solvers/refinement/string_expr.cpp | 50 ++-------------------- 3 files changed, 8 insertions(+), 68 deletions(-) diff --git a/regression/strings/java_contains/test.desc b/regression/strings/java_contains/test.desc index 7fb54c98b24..ef518fabce9 100644 --- a/regression/strings/java_contains/test.desc +++ b/regression/strings/java_contains/test.desc @@ -3,6 +3,6 @@ test_contains.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_contains.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_contains.java line 13: FAILURE$ +^\[assertion.1\] assertion at file test_contains.java line 7: SUCCESS$ +^\[assertion.2\] assertion at file test_contains.java line 8: FAILURE$ -- diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index d341a2da6a1..7eeb8a5bbe0 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -20,9 +20,8 @@ Date: September 2016 void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt::instructionst::iterator & i_it, irep_idt function_name) { // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" - //to_symbol_expr(function_call.function()).set_identifier(irep_idt("__CPROVER_uninterpreted_string_char_at")); - - std::cout << "Warning: in pass_preprocess::make_string_function: we should introduce an intermediary variable for each argument" << std::endl; + // Warning: in pass_preprocess::make_string_function: + // we should introduce an intermediary variable for each argument code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -36,13 +35,10 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f // make sure it is in the function map goto_functions.function_map[irep_idt(function_name)]; - //debug() << "we should replace the function call by function application?" << "see builtin_functions.cpp" << eom; - function_application_exprt rhs; rhs.type()=old_type.return_type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - //rhs.arguments()=function_call.arguments(); for(int i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.lhs(), rhs); @@ -151,26 +147,13 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } } } else { - //std::cout << "processing a none function call " << i_it->code.pretty() << std::endl; if(i_it->is_assign()) { - //std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; code_assignt assignment = to_code_assign(i_it->code); exprt new_rhs = replace_string_literals(symbol_table,goto_functions,assignment.rhs()); code_assignt new_assignment(assignment.lhs(),new_rhs); new_assignment.add_source_location()=assignment.source_location(); i_it->make_assignment(); i_it->code=new_assignment; - /* - if(has_java_string_type(assignment.rhs()) ) { - std::cout << "found a string assignment: " << i_it->code.pretty() << std::endl; - if(assignment.rhs().operands().size() == 1 && - assignment.rhs().op0().id() ==ID_symbol) { - std::string id(to_symbol_expr(assignment.rhs().op0()).get_identifier().c_str()); - std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; - if(id.substr(0,31) == "java::java.lang.String.Literal.") - make_string_function_of_assign(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_literal"); - } - }*/ } } } @@ -182,7 +165,6 @@ exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & got if(has_java_string_type(expr) ) { if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) { std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); - //std::cout << "id = \"" << id.substr(0,31) << "\"" << std::endl; if(id.substr(0,31) == "java::java.lang.String.Literal."){ function_application_exprt rhs; rhs.type()=expr.type(); diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 03c786349e2..a8f1467b473 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -49,7 +49,6 @@ string_ref_typet::string_ref_typet(unsignedbv_typet char_type) : struct_typet() components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; - std::cout << "string_ref_typet() --> " << this->pretty() << std::endl; } exprt index_zero = string_ref_typet::index_zero(); @@ -83,20 +82,13 @@ bool string_ref_typet::is_java_string_type(const typet &type) irep_idt tag = to_struct_type(subtype).get_tag(); return (tag == irep_idt("java.lang.String")); } - else { - std::cout << "string_ref_typet::is_java_string_type: warning: incomplete string type " - << type.pretty() << std::endl; - return false; - } + else return false; } else return false; } string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; - std::cout << "string_exprt::string_exprt(): warning: initializing a string expression without knowing its type" << std::endl; - if(string_language_mode == USE_JAVA_STRINGS) - t = string_ref_typet(string_ref_typet::java_char_type()); symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); @@ -108,24 +100,8 @@ string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); - std::cout << "string_exprt::string_exprt()-> " << this->pretty() << std::endl; } -/* -std::map symbol_to_string_exprt; - -std::map string_exprt::symbol_to_string(){ -return symbol_to_string_exprt; -}; - -string_exprt string_exprt::find_symbol(const symbol_exprt & expr){ - return symbol_to_string_exprt[expr.get_identifier()]; -} - -void string_exprt::assign_to_symbol(const symbol_exprt & expr){ -symbol_to_string_exprt[expr.get_identifier()] = *this; -}*/ - void string_exprt::of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { assert(string_ref_typet::is_unrefined_string_type(expr.true_case().type())); @@ -144,8 +120,6 @@ symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { - std::cout << "get_string_of_symbol : " << sym.pretty() << std::endl; - if(string_ref_typet::is_c_string_type(sym.type())) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); @@ -168,20 +142,13 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map s = " - << s.pretty() << std::endl; - if(unrefined_string.id()==ID_function_application) s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); else if(unrefined_string.id()==ID_symbol) @@ -216,8 +183,6 @@ void string_exprt::of_function_application(const function_application_exprt & ex const exprt &name = expr.function(); if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - //std::cout << "string_exprt::of_function_application(" - //<< id << ")" << std::endl; if (is_string_literal_func(id)) { return of_string_literal(expr,axioms); } else if (is_string_concat_func(id)) { @@ -236,7 +201,6 @@ void string_exprt::of_function_application(const function_application_exprt & ex irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); - std::cout << "of_string_litteral: " << value << std::endl; return irep_idt(value); } @@ -283,11 +247,7 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ assert(string_ref_typet::is_unrefined_string_type(arg.type())); const exprt &s = arg.op0(); - std::cout << "it seems the value of the string is lost, " - << "we need to recover it from the identifier" << std::endl; - /*std::string tmp(s.get(ID_identifier).c_str()); - std::string value = tmp.substr(31); - std::cout << "of_string_litteral: " << value << std::endl;*/ + //it seems the value of the string is lost, we need to recover it from the identifier sval = extract_java_string(to_symbol_expr(s)); char_width = JAVA_CHAR_WIDTH; char_type = string_ref_typet::java_char_type(); @@ -344,10 +304,8 @@ void string_exprt::of_string_substring const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 3); // bad args to string substring? - std::cout << "of_string_substring(" << args[0].pretty() << ")" << std::endl; string_exprt str = of_expr(args[0],symbol_to_string,axioms); - std::cout << "gives str = (" << str.pretty() << ")" << std::endl; exprt i(args[1]); assert(i.type() == string_ref_typet::index_type()); exprt j(args[2]); From f9c45b33923f23b9e7a8d1ac065df9bd50cb8a8a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 14:01:19 +0100 Subject: [PATCH 079/221] basic support for StringBuilder --- src/goto-programs/pass_preprocess.cpp | 31 ++++++++++++++++++++++++++ src/solvers/refinement/string_expr.cpp | 27 +++++++++++----------- src/solvers/refinement/string_expr.h | 6 ++++- 3 files changed, 49 insertions(+), 15 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 7eeb8a5bbe0..53e6cc2d05d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -98,6 +98,33 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g goto_functions.function_map[irep_idt(function_name)]; } +void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt::instructionst::iterator & i_it, irep_idt function_name){ + // replace "s.append(x)" by "s=__CPROVER_uninterpreted_strcat(s,x)" + code_function_callt &function_call=to_code_function_call(i_it->code); + code_typet old_type=to_code_type(function_call.function().type()); + + auxiliary_symbolt tmp_symbol; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=function_name; + symbol_table.add(tmp_symbol); + + function_application_exprt rhs; + rhs.type()=function_call.arguments()[0].type(); + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(function_name); + for(int i = 0; i < function_call.arguments().size(); i++) + rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); + code_assignt assignment(function_call.arguments()[0], rhs); + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; + // make sure it is in the function map + goto_functions.function_map[irep_idt(function_name)]; +} + + bool has_java_string_type(const exprt &expr) { const typet type = expr.type(); @@ -142,6 +169,10 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index a8f1467b473..3b0522ac677 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -13,20 +13,6 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com // For debuggin #include -enum {UNDEFINED_MODE, USE_JAVA_STRINGS, USE_C_STRINGS } string_language_mode; - -void ensure_java_strings(){ - if(string_language_mode == UNDEFINED_MODE) - string_language_mode = USE_JAVA_STRINGS; - assert(string_language_mode == USE_JAVA_STRINGS); -} - -void ensure_c_strings(){ - if(string_language_mode == UNDEFINED_MODE) - string_language_mode = USE_C_STRINGS; - assert(string_language_mode == USE_C_STRINGS); -} - string_ref_typet::string_ref_typet() : struct_typet() { components().resize(2); components()[0].set_name("length"); @@ -86,6 +72,19 @@ bool string_ref_typet::is_java_string_type(const typet &type) } else return false; } +bool string_ref_typet::is_java_string_builder_type(const typet &type) +{ + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_struct) { + irep_idt tag = to_struct_type(subtype).get_tag(); + return (tag == irep_idt("java.lang.StringBuilder")); + } + else return false; + } else return false; +} + string_exprt::string_exprt() : struct_exprt(string_ref_typet()) { string_ref_typet t; diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index db9af8e3c91..ef1f670dab9 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -47,8 +47,12 @@ class string_ref_typet : public struct_typet { static bool is_c_string_type(const typet & type); static bool is_java_string_type(const typet & type); + static bool is_java_string_builder_type(const typet & type); static inline bool is_unrefined_string_type(const typet & type) - { return (is_c_string_type(type) || is_java_string_type(type)); } + { return (is_c_string_type(type) || is_java_string_type(type) || is_java_string_builder_type(type)); } + static inline bool is_unrefined_string(const exprt & expr) + { return (is_unrefined_string_type(expr.type())); } + }; typedef std::vector axiom_vect; From f100d555f688e047578d1175de959bd260d2d2f7 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 14:54:05 +0100 Subject: [PATCH 080/221] support for StringBuilder init without argument --- src/goto-programs/pass_preprocess.cpp | 2 ++ src/solvers/refinement/string_expr.cpp | 8 ++++++++ src/solvers/refinement/string_expr.h | 1 + src/solvers/refinement/string_functions.cpp | 4 ++++ src/solvers/refinement/string_functions.h | 2 +- 5 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 53e6cc2d05d..05b597ccbce 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -175,6 +175,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { + make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); } } } else { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 3b0522ac677..0c971978c78 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -190,6 +190,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_substring(expr,symbol_to_string,axioms); } else if (is_string_char_set_func(id)) { return of_string_char_set(expr,symbol_to_string,axioms); + } else if (is_string_empty_string_func(id)) { + return of_empty_string(expr,axioms); } else if (is_string_copy_func(id)) { return of_string_copy(expr,symbol_to_string,axioms); } @@ -219,6 +221,12 @@ void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_ axioms.emplace_back(equal_exprt(length(),s_length)); } +void string_exprt::of_empty_string(const function_application_exprt &f, axiom_vect & axioms) +{ + assert(f.arguments().size() == 0); + axioms.emplace_back(equal_exprt(length(),index_zero)); +} + void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index ef1f670dab9..e1df5f7bf89 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -117,6 +117,7 @@ class string_exprt : public struct_exprt { void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); + void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 9ac77778911..aec8f012e68 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -26,6 +26,7 @@ Date: September 2016 #define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" #define string_literal_func "__CPROVER_uninterpreted_string_literal" #define string_copy_func "__CPROVER_uninterpreted_string_copy" +#define string_empty_string_func "__CPROVER_uninterpreted_empty_string" bool starts_with(std::string s, std::string t) { for(int i = 0; i < t.length(); i++) @@ -82,4 +83,7 @@ bool is_string_copy_func(irep_idt id) { bool is_string_last_index_of_func(irep_idt id) { return (starts_with(id2string(id),string_last_index_of_func)); } +bool is_string_empty_string_func(irep_idt id) { + return (starts_with(id2string(id),string_empty_string_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 206d7bb2574..fd35da1ca53 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -33,6 +33,6 @@ bool is_string_char_set_func(irep_idt id); bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); bool is_string_copy_func(irep_idt id); - +bool is_string_empty_string_func(irep_idt id); #endif From 33ded2d3480a30933fcd46da253427f4409e17d1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 14:55:46 +0100 Subject: [PATCH 081/221] test for StringBuilder --- .../strings/java_string_builder/test.desc | 9 +++++++++ .../test_string_builder.class | Bin 0 -> 1015 bytes .../test_string_builder.java | 16 ++++++++++++++++ 3 files changed, 25 insertions(+) create mode 100644 regression/strings/java_string_builder/test.desc create mode 100644 regression/strings/java_string_builder/test_string_builder.class create mode 100644 regression/strings/java_string_builder/test_string_builder.java diff --git a/regression/strings/java_string_builder/test.desc b/regression/strings/java_string_builder/test.desc new file mode 100644 index 00000000000..c0b3b6a51ce --- /dev/null +++ b/regression/strings/java_string_builder/test.desc @@ -0,0 +1,9 @@ +CORE +test_string_builder.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_string_builder.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_string_builder.java line 12: SUCCESS$ +^\[assertion.3\] assertion at file test_string_builder.java line 13: FAILURE$ +-- diff --git a/regression/strings/java_string_builder/test_string_builder.class b/regression/strings/java_string_builder/test_string_builder.class new file mode 100644 index 0000000000000000000000000000000000000000..0e472c293b34b5242899232200736cdc626afc32 GIT binary patch literal 1015 zcmZuwTW=Ck5dIFgU6!R#XbWDdw4wsNDOhjCwp#Ux$^*v6`p_)wX+4!LWOp&fM1M%1 zO?*}pn%Jbi`v?3jK4_e?g_2rc&YYS3=9`)C%>MlQ{Rlt_s~VD+R&Ygw57R2L(q2_@ zO~rM2&4n?Fyo!Q`8O$n})1XV-y!01T+)!{+LlGqfw-}OH!*RInik9U(7LHMGa+85= zGK9*)67DjCKbL>O5Lj!OoFP^b7Jt^+t8@Fg1k;B-Ls$$GxmT54|{!~b|w96fL%kk2;>K)NExjip=bxa_| zkov#Iqhkz%(zf}wc$d*}8+WKcW>1)AlV_;I47W@jcX3b07{)0eq11+s`&goy1I~wi zF`n3V%cj}A%(6sLQfZq68`7YH2RfFq!Vn)&RqMOF;hqW|t3uKm?KTlJ%;kn?b|%yt zk$OLcpqc439XCBJ|c(Ei6Hu; zA0FuRrBu2YP>_Z8BM!^3K;X&cPIFc*~UvyPUm?6i9sek6K B*=GO% literal 0 HcmV?d00001 diff --git a/regression/strings/java_string_builder/test_string_builder.java b/regression/strings/java_string_builder/test_string_builder.java new file mode 100644 index 00000000000..d29581a373f --- /dev/null +++ b/regression/strings/java_string_builder/test_string_builder.java @@ -0,0 +1,16 @@ +public class test_string_builder { + public static void main(String[] argv) { + if(argv.length > 2) { + StringBuilder tmp = new StringBuilder(); + tmp.append("prefix "); + tmp.append(argv[1]); + tmp.append(" middle "); + tmp.append(argv[2]); + tmp.append(" end"); + String r = tmp.toString(); + assert(r.startsWith("pref")); + assert(r.endsWith("end")); + assert(r.startsWith("pr3f")); + } + } +} From 8e212b2452c01e5a53da9af561fc4789bd4ad655 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 15:30:04 +0100 Subject: [PATCH 082/221] support for StringBuilder.length --- src/goto-programs/pass_preprocess.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 05b597ccbce..a974f4b41b0 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -159,6 +159,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal"); } else if(function_id == irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")) { From 9f53d15dee4b414243d1f95d770fe9acd180d6c0 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 15:38:35 +0100 Subject: [PATCH 083/221] init from String and void for String and StringBuilder --- src/goto-programs/pass_preprocess.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index a974f4b41b0..7a6a3447479 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -177,6 +177,10 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { + make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); + } else if(function_id == irep_idt("java::java.lang.String.:()V")) { + make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); } From 27a4a7da4b8fbeec3ccc384cd13001be7f1e3260 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 15:39:18 +0100 Subject: [PATCH 084/221] tests for StringBuilder.length --- .../strings/java_string_builder_length/test.desc | 8 ++++++++ .../test_sb_length.class | Bin 0 -> 791 bytes .../test_sb_length.java | 11 +++++++++++ 3 files changed, 19 insertions(+) create mode 100644 regression/strings/java_string_builder_length/test.desc create mode 100644 regression/strings/java_string_builder_length/test_sb_length.class create mode 100644 regression/strings/java_string_builder_length/test_sb_length.java diff --git a/regression/strings/java_string_builder_length/test.desc b/regression/strings/java_string_builder_length/test.desc new file mode 100644 index 00000000000..a15660ee85b --- /dev/null +++ b/regression/strings/java_string_builder_length/test.desc @@ -0,0 +1,8 @@ +CORE +test_sb_length.class +--pass +^EXIT=10$ +^SIGNAL=0$ +\[assertion.1\] assertion at file test_sb_length.java line 6: SUCCESS$ +\[assertion.2\] assertion at file test_sb_length.java line 8: FAILURE$ +-- diff --git a/regression/strings/java_string_builder_length/test_sb_length.class b/regression/strings/java_string_builder_length/test_sb_length.class new file mode 100644 index 0000000000000000000000000000000000000000..586e8f71935b9b16a50d4a4a6ad14c4069667c5c GIT binary patch literal 791 zcmZuv&rcIk5dPkFyT7`H((4HUL5zx!m=rzKNWcSm?LOV z9Ojj`VB)$1TY(lG+`vr}w-`!`JdQ<_$Zi-vmN9Py!e?N+491!aWpbY(<1M{l(AT@Z zU>I-6P(1A)v_$k=fhlpoWymn?y=?6Bx4a(kuv2d)kqkSlsxaS7c>B#3@1=NB$Y8Ct zgOlb?v)hl_VpFPCr9{NZUfkLXMA%7Quc&@53YcJ+`M39@z6^X3kXegw9BMV3A)KH=IOL~x;`tE)v)Ac zK*BLWZ;`&{$TG6o>JaR+0-{8(kp>z43X_;3UqRnfsYZ752-;3DGlbr#6|(~v+h1TF zVzM@XRj@xGcLaN92s!bMJ{(&0yQp#NU4b&{7CjbBd literal 0 HcmV?d00001 diff --git a/regression/strings/java_string_builder_length/test_sb_length.java b/regression/strings/java_string_builder_length/test_sb_length.java new file mode 100644 index 00000000000..652b72cdc90 --- /dev/null +++ b/regression/strings/java_string_builder_length/test_sb_length.java @@ -0,0 +1,11 @@ +public class test_sb_length { + public static void main(String[] argv) { + StringBuilder tmp = new StringBuilder("prefix"); + //tmp.append("prefix"); + tmp.append("end"); + assert(tmp.length() == 9); + if(argv.length > 1) { + assert(tmp.length() == 12); + } + } +} From 6661386403c345d91b285ad36b6506c5bd0a3431 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Sep 2016 16:20:59 +0100 Subject: [PATCH 085/221] substring with only one argument (we should add tests for this also) --- src/goto-programs/pass_preprocess.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 7a6a3447479..855f08bd6a5 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -169,6 +169,11 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); + } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { From 37510293da4046432a43c118854901c9d13d7fc7 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 14 Sep 2016 12:19:34 +0100 Subject: [PATCH 086/221] conversion from integers to strings --- regression/strings/cprover-string-hack.h | 7 ++ regression/strings/test_int/test.c | 14 ++++ regression/strings/test_int/test.desc | 9 +++ src/solvers/refinement/string_expr.cpp | 68 ++++++++++++++++++-- src/solvers/refinement/string_expr.h | 25 +++---- src/solvers/refinement/string_functions.cpp | 10 +++ src/solvers/refinement/string_functions.h | 2 + src/solvers/refinement/string_refinement.cpp | 38 +++++++++-- src/solvers/refinement/string_refinement.h | 11 ++-- 9 files changed, 153 insertions(+), 31 deletions(-) create mode 100644 regression/strings/test_int/test.c create mode 100644 regression/strings/test_int/test.desc diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 1dc804051d7..eca10720bfa 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -46,6 +46,11 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) +#define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy(s) +#define __CPROVER_parse_int(s) __CPROVER_uninterpreted_parse_int(s) +#define __CPROVER_string_of_int(i) __CPROVER_uninterpreted_string_of_int(i) + + /****************************************************************************** * don't use these directly ******************************************************************************/ @@ -63,4 +68,6 @@ extern int __CPROVER_uninterpreted_strindexof(__CPROVER_string str, __CPROVER_ch extern int __CPROVER_uninterpreted_strlastindexof(__CPROVER_string str, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, int pos, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_copy(__CPROVER_string str); +extern unsigned __CPROVER_uninterpreted_parse_int(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_string_of_int(unsigned i); diff --git a/regression/strings/test_int/test.c b/regression/strings/test_int/test.c new file mode 100644 index 00000000000..965f6c77baf --- /dev/null +++ b/regression/strings/test_int/test.c @@ -0,0 +1,14 @@ +#include +#include "../cprover-string-hack.h" + + +int main() +{ + __CPROVER_string s; + unsigned i = 10; + s = __CPROVER_string_of_int(123); + assert(__CPROVER_char_at(s,0) == '1'); + assert(__CPROVER_char_at(s,1) == '2'); + assert(__CPROVER_char_at(s,2) == '4'); + return 0; +} diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc new file mode 100644 index 00000000000..2b4732a3db1 --- /dev/null +++ b/regression/strings/test_int/test.desc @@ -0,0 +1,9 @@ +CORE +test.c +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_char_at(s, 0) == .1.: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_char_at(s, 1) == .2.: SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_uninterpreted_char_at(s, 2) == .4.: FAILURE$ +-- diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 0c971978c78..5fed44d6217 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -152,8 +152,7 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); // bad args to string substring? + assert(args.size() >= 2); string_exprt str = of_expr(args[0],symbol_to_string,axioms); exprt i(args[1]); assert(i.type() == string_ref_typet::index_type()); - exprt j(args[2]); - assert(j.type() == string_ref_typet::index_type()); + + exprt j; + if(args.size() == 3){ + j = args[2]; + assert(j.type() == string_ref_typet::index_type()); + } + else { + j = str.length(); + } symbol_exprt idx = fresh_symbol("index_substring", string_ref_typet::index_type()); @@ -331,6 +339,55 @@ void string_exprt::of_string_substring axioms.push_back(a.forall(idx,index_zero,length())); } +constant_exprt constant_of_nat(int i,int width, typet t) { + return constant_exprt(integer2binary(i,width), t); +} + +void string_exprt::of_int +(const function_application_exprt &expr,axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + + exprt i = args[0]; + typet type = i.type(); + int width = type.get_unsigned_int(ID_width); + exprt ten = constant_of_nat(10,width,type); + exprt zero_char = constant_of_nat(48,CHAR_WIDTH,string_ref_typet::char_type()); + exprt nine_char = constant_of_nat(57,CHAR_WIDTH,string_ref_typet::char_type()); + int max_size = 10; + + axioms.emplace_back(and_exprt(*this > index_zero,*this <= string_ref_typet::index_of_int(max_size))); + + + for(int size=1; size<=max_size;size++) { + exprt sum = constant_of_nat(0,width,type); + exprt all_numbers = true_exprt(); + + for(int j=0; j & symbol_to_string, axiom_vect & axioms) { @@ -352,3 +409,4 @@ void string_exprt::of_string_char_set } + diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index e1df5f7bf89..69b432ae2d9 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -53,6 +53,10 @@ class string_ref_typet : public struct_typet { static inline bool is_unrefined_string(const exprt & expr) { return (is_unrefined_string_type(expr.type())); } + static inline constant_exprt index_of_int(int i) { + return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type()); + } + }; typedef std::vector axiom_vect; @@ -118,6 +122,7 @@ class string_exprt : public struct_exprt { void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); + void of_int(const function_application_exprt &f, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); @@ -126,7 +131,9 @@ class string_exprt : public struct_exprt { static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); - + +public: + exprt convert_string_equal(const function_application_exprt &f, axiom_vect & axioms); }; @@ -135,21 +142,5 @@ extern inline string_exprt &to_string_expr(exprt &expr){ return static_cast(expr); } -// The following functions convert different string functions to -// bit vectors and add the corresponding lemmas to a list of -// properties to be checked -bvt convert_string_equal(const function_application_exprt &f); -bvt convert_string_copy(const function_application_exprt &f); -bvt convert_string_length(const function_application_exprt &f); -bvt convert_string_is_prefix(const function_application_exprt &f); -bvt convert_string_is_suffix(const function_application_exprt &f); -bvt convert_string_contains(const function_application_exprt &f); -bvt convert_string_index_of(const function_application_exprt &f); -bvt convert_string_last_index_of(const function_application_exprt &f); -bvt convert_char_literal(const function_application_exprt &f); -bvt convert_string_char_at(const function_application_exprt &f); - - - #endif diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index aec8f012e68..4abc7b63700 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -12,6 +12,7 @@ Date: September 2016 #define char_literal_func "__CPROVER_uninterpreted_char_literal" #define string_length_func "__CPROVER_uninterpreted_strlen" +#define string_set_length_func "__CPROVER_uninterpreted_set_length" #define string_equal_func "__CPROVER_uninterpreted_string_equal" #define string_char_at_func "__CPROVER_uninterpreted_char_at" #define string_concat_func "__CPROVER_uninterpreted_strcat" @@ -27,6 +28,9 @@ Date: September 2016 #define string_literal_func "__CPROVER_uninterpreted_string_literal" #define string_copy_func "__CPROVER_uninterpreted_string_copy" #define string_empty_string_func "__CPROVER_uninterpreted_empty_string" +#define string_parse_int_func "__CPROVER_uninterpreted_parse_int" +#define string_of_int_func "__CPROVER_uninterpreted_string_of_int" + bool starts_with(std::string s, std::string t) { for(int i = 0; i < t.length(); i++) @@ -86,4 +90,10 @@ bool is_string_last_index_of_func(irep_idt id) { bool is_string_empty_string_func(irep_idt id) { return (starts_with(id2string(id),string_empty_string_func)); } +bool is_string_parse_int_func(irep_idt id) { + return (starts_with(id2string(id),string_parse_int_func)); +} +bool is_string_of_int_func(irep_idt id) { + return (starts_with(id2string(id),string_of_int_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index fd35da1ca53..4a35cc75182 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -34,5 +34,7 @@ bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); bool is_string_copy_func(irep_idt id); bool is_string_empty_string_func(irep_idt id); +bool is_string_parse_int_func(irep_idt id); +bool is_string_of_int_func(irep_idt id); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index a6d108f29a3..637fbc1e69b 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -248,7 +248,7 @@ bvt string_refinementt::convert_function_application( } else if (is_string_length_func(id)) { return convert_string_length(expr); } else if (is_string_equal_func(id)) { - return convert_string_equal(expr); + return convert_bv(convert_string_equal(expr)); } else if (is_string_char_at_func(id)) { return convert_string_char_at(expr); } else if (is_string_is_prefix_func(id)) { @@ -265,6 +265,8 @@ bvt string_refinementt::convert_function_application( return convert_string_index_of(expr); } else if (is_string_last_index_of_func(id)) { return convert_string_last_index_of(expr); + } else if (is_string_parse_int_func(id)) { + return convert_bv(convert_string_parse_int(expr)); } } @@ -382,9 +384,7 @@ string_exprt string_refinementt::make_string(const exprt & str) return string_exprt::of_expr(str,symbol_to_string,string_axioms); } -bvt string_refinementt::convert_string_equal( - const function_application_exprt &f) -{ +exprt string_refinementt::convert_string_equal(const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt eq = fresh_boolean("equal"); @@ -418,7 +418,7 @@ bvt string_refinementt::convert_string_equal( or_exprt(notequal_exprt(s1.length(), s2.length()), string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); - return convert_bv(tc_eq); + return tc_eq; } @@ -694,6 +694,34 @@ bvt string_refinementt::convert_string_char_at( } } +constant_exprt string_refinementt::constant_of_nat(int i) { + return constant_exprt(integer2binary(i, boolbv_width(natural_typet())), natural_typet()); +} + +exprt string_refinementt::convert_string_parse_int +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + + string_exprt str = make_string(args[0]); + symbol_exprt i = string_exprt::fresh_symbol("parsed_int",natural_typet()); + + exprt ten = constant_of_nat(10); + exprt zero_char = constant_of_nat(48); + + for(int size=1; size<=10;size++) { + exprt sum = constant_of_nat(0); + + for(int j=0; j Date: Wed, 14 Sep 2016 13:36:11 +0100 Subject: [PATCH 087/221] conversion from integers to strings in java --- regression/strings/java_int/test.desc | 9 +++++++++ regression/strings/java_int/test_int.class | Bin 0 -> 781 bytes regression/strings/java_int/test_int.java | 13 +++++++++++++ src/goto-programs/pass_preprocess.cpp | 3 +++ src/solvers/refinement/string_expr.cpp | 18 +++++++++++++++--- 5 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 regression/strings/java_int/test.desc create mode 100644 regression/strings/java_int/test_int.class create mode 100644 regression/strings/java_int/test_int.java diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc new file mode 100644 index 00000000000..8fbe98080b4 --- /dev/null +++ b/regression/strings/java_int/test.desc @@ -0,0 +1,9 @@ +CORE +test_int.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_int.java line 9: SUCCESS$ +^\[assertion.2\] assertion at file test_int.java line 10: SUCCESS$ +^\[assertion.3\] assertion at file test_int.java line 11: FAILURE$ +-- diff --git a/regression/strings/java_int/test_int.class b/regression/strings/java_int/test_int.class new file mode 100644 index 0000000000000000000000000000000000000000..e3c2931c17a66c7ea48b640e7fe861dce40c1c55 GIT binary patch literal 781 zcmZuuO>fgc5PcheY~ni9`6{6_Kudw7fmWixg;G%hl_~`|1o2T0$Z=L-OKKx~!;k5O z8=L{DMIgbQ9|g?1q~_}~yF2sd&AhkYzJK}xU=^1f6i|0?0<#WIVy*y=2FED}7U~?Q z9h|{D#{xrT(N7W)D;b5!ZJGG}kr*(rZ3cTyhElCF7|qs02D1|l1jBS!hT`6Mw=d!c z8cc;33uW+iivze!m;F{jf)Ik zhQ8n55rHD<|5^AC;GqbHQr5c_Dlru4h-gx-HMd&-N+$z@=YG6FgG>T+$hwTCGa}c? zvw=utECxsWlT~U=1+sh_^Ym#2`cCH6wPLy%VA>Fh$LQ6dlhJ7{9e};lKulA#(:()V")) { make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); + } else if(function_id == irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_of_int"); } } + } else { if(i_it->is_assign()) { code_assignt assignment = to_code_assign(i_it->code); diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 5fed44d6217..5645cd2e164 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -152,7 +152,6 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map index_zero,*this <= string_ref_typet::index_of_int(max_size))); From 0081e63f302d0af6c3f3a7f3c1b96ba602ce339b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 14 Sep 2016 14:16:38 +0100 Subject: [PATCH 088/221] parsing of integer in strings --- regression/strings/test_int/test.c | 6 ++- regression/strings/test_int/test.desc | 3 +- src/solvers/refinement/string_refinement.cpp | 53 +++++++++++--------- src/solvers/refinement/string_refinement.h | 2 +- 4 files changed, 38 insertions(+), 26 deletions(-) diff --git a/regression/strings/test_int/test.c b/regression/strings/test_int/test.c index 965f6c77baf..3f8f8651783 100644 --- a/regression/strings/test_int/test.c +++ b/regression/strings/test_int/test.c @@ -9,6 +9,10 @@ int main() s = __CPROVER_string_of_int(123); assert(__CPROVER_char_at(s,0) == '1'); assert(__CPROVER_char_at(s,1) == '2'); - assert(__CPROVER_char_at(s,2) == '4'); + + unsigned j = __CPROVER_parse_int(__CPROVER_string_literal("234")); + + assert(j == 234); + assert(j < 233 || __CPROVER_char_at(s,2) == '4'); return 0; } diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc index 2b4732a3db1..0f2e1ce6f10 100644 --- a/regression/strings/test_int/test.desc +++ b/regression/strings/test_int/test.desc @@ -5,5 +5,6 @@ test.c ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_uninterpreted_char_at(s, 0) == .1.: SUCCESS$ ^\[main.assertion.2\] assertion __CPROVER_uninterpreted_char_at(s, 1) == .2.: SUCCESS$ -^\[main.assertion.3\] assertion __CPROVER_uninterpreted_char_at(s, 2) == .4.: FAILURE$ +^\[main.assertion.3\] assertion j == 234: SUCCESS$ +^\[main.assertion.4\] assertion j < 233 || __CPROVER_uninterpreted_char_at(s, 2) == .4.: FAILURE$ -- diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 637fbc1e69b..44dd9654b1a 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -24,11 +24,8 @@ unsignedbv_typet char_type = string_ref_typet::char_type(); signedbv_typet index_type = string_ref_typet::index_type(); unsignedbv_typet java_char_type = string_ref_typet::java_char_type(); -constant_exprt index_of_int(int i) { -return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type); -} -constant_exprt zero = index_of_int(0); +constant_exprt zero = string_ref_typet::index_of_int(0); // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { @@ -433,7 +430,7 @@ bvt string_refinementt::convert_string_length( } exprt string_refinementt::is_positive(const exprt & x) -{ return binary_relation_exprt(x, ID_ge, index_of_int(0)); } +{ return binary_relation_exprt(x, ID_ge, string_ref_typet::index_of_int(0)); } bvt string_refinementt::convert_string_is_prefix @@ -555,7 +552,7 @@ bvt string_refinementt::convert_string_contains( string_axioms.push_back (string_constraintt::not_contains - (zero,plus_exprt(index_of_int(1),minus_exprt(s0.length(),s1.length())), + (zero,plus_exprt(string_ref_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); return convert_bv(tc_contains); @@ -598,8 +595,8 @@ bvt string_refinementt::convert_string_index_of( // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) // && forall n. 0 < n < i => s[n] != c - string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,string_ref_typet::index_of_int(-1)),not_exprt(contains)).exists(index,string_ref_typet::index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,string_ref_typet::index_of_int(-1))); string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); @@ -631,12 +628,12 @@ bvt string_refinementt::convert_string_last_index_of( c = typecast_exprt(c,java_char_type); } - string_axioms.push_back(string_constraintt(equal_exprt(index,index_of_int(-1)),not_exprt(contains)).exists(index,index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,string_ref_typet::index_of_int(-1)),not_exprt(contains)).exists(index,string_ref_typet::index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,string_ref_typet::index_of_int(-1))); string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,index_of_int(1)),str.length())); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,string_ref_typet::index_of_int(1)),str.length())); symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); @@ -694,8 +691,8 @@ bvt string_refinementt::convert_string_char_at( } } -constant_exprt string_refinementt::constant_of_nat(int i) { - return constant_exprt(integer2binary(i, boolbv_width(natural_typet())), natural_typet()); +constant_exprt string_refinementt::constant_of_nat(int i,typet t) { + return constant_exprt(integer2binary(i, boolbv_width(t)), t); } exprt string_refinementt::convert_string_parse_int @@ -705,18 +702,28 @@ exprt string_refinementt::convert_string_parse_int assert(args.size() == 1); string_exprt str = make_string(args[0]); - symbol_exprt i = string_exprt::fresh_symbol("parsed_int",natural_typet()); + typet type = expr.type(); + symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); + + exprt zero_char; + if(string_ref_typet::is_c_string_type(args[0].type())) { + debug() << "string_refinementt::convert_string_parse_int of c string" << eom; + zero_char = constant_of_nat(48,string_ref_typet::char_type()); + } + else { + debug() << "string_refinementt::convert_string_parse_int of non c string" << eom; + zero_char = constant_of_nat(48,string_ref_typet::java_char_type()); + } - exprt ten = constant_of_nat(10); - exprt zero_char = constant_of_nat(48); + exprt ten = constant_of_nat(10,type); for(int size=1; size<=10;size++) { - exprt sum = constant_of_nat(0); + exprt sum = constant_of_nat(0,type); for(int j=0; j string_refinementt::map_of_sum(const exprt &f) { exprt string_refinementt::sum_of_map(std::map & m, bool negated) { - exprt sum = index_of_int(0); + exprt sum = string_ref_typet::string_ref_typet::index_of_int(0); for (std::map::iterator it = m.begin(); it != m.end(); it++) { @@ -1008,10 +1015,10 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { int second = negated?(-it->second):it->second; if (second != 0) if (second == -1) - if(sum == index_of_int(0)) sum = unary_minus_exprt(t); + if(sum == string_ref_typet::index_of_int(0)) sum = unary_minus_exprt(t); else sum = minus_exprt(sum,t); else if (second == 1) - if(sum == index_of_int(0)) sum = t; + if(sum == string_ref_typet::index_of_int(0)) sum = t; else sum = plus_exprt(sum, t); else { debug() << "in string_refinementt::sum_of_map:" diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 9ac93022780..c8ed63301c2 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -126,7 +126,7 @@ class string_refinementt: public bv_refinementt void make_string(const symbol_exprt & sym, const exprt &str); // Natural number expression corresponding to a constant integer - constant_exprt constant_of_nat(int i); + constant_exprt constant_of_nat(int i,typet t); void add_lemma(const exprt &lemma); From 45f4b778c6e64d69fd286b90dd60227d4b51cfe5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 14 Sep 2016 14:20:43 +0100 Subject: [PATCH 089/221] parsing of integer in strings --- regression/strings/java_int/test_int.class | Bin 781 -> 885 bytes regression/strings/java_int/test_int.java | 6 +++++- src/goto-programs/pass_preprocess.cpp | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/regression/strings/java_int/test_int.class b/regression/strings/java_int/test_int.class index e3c2931c17a66c7ea48b640e7fe861dce40c1c55..e846bb3de29ab5fcf9d4bc7b9c5525ad0cf09f08 100644 GIT binary patch delta 480 zcmYL_ze^)g5XV0+zRlaL8!u*!#+ay4@6?!EG5}mzTcVoe&-!W|3?>pKi=L06)Fy$WE=*_I^-CP z5o5?O>|l|x$p_4cVbo!akA_dJlCQ@N6RnFvx{D8nNtXhj1#y{T+QlW_`j^Y;Qn@nc zGDA^e`&;{dt*Jy4pO;+2d zYHlqi_CO`l!D6X8P>8O?guHT+m1L`MjrtKZ(k(F>f=W(F;z=E}{v{$f9JEIwD~CyQ zgS}w=M4#ZLtZx11jLti(jccO6LNt@oiSpSCdHzlYDv?m7fFreqk-c$=9yS@#oDqCQ z>{i8SO{{(s{T}H|qo0Jd45>{+uTtXNdmyW_GT8Ta(|l+ik{+=uoD+=xj_$Zbze~R! R7_7C3#Fv9_NQch)p8;rZKLh{( delta 402 zcmYL^yG{aO5QV=VcK3&6QRJd4iWj`2NW@s!DTzLSjZzs3VlW00*w|WGS`a!KJFU?~ z5>2$X_fc%s*-g}DZaH)2n@{V;+Is(beg(EE+C*_}Cdt}NF&#yd)6CeIxSCm;Ip#I_ z?yhGnXcoJJ!l6T4v*fVMicB0{SZ}^TC@{zqk=m4ZExDyhNuL$FO`)g=$FVRZ zMUf`_EkjcjnzT~Fl1hs<^GCQ7pg=N(ej?IG8}}H6@FT|mxnEx2(j*k$^S>GoXeNFD DBM2{U diff --git a/regression/strings/java_int/test_int.java b/regression/strings/java_int/test_int.java index 8cc6bc03927..61c7c1c2c41 100644 --- a/regression/strings/java_int/test_int.java +++ b/regression/strings/java_int/test_int.java @@ -8,6 +8,10 @@ public static void main(String[] argv) { char e = s.charAt(3); assert(c == '3'); assert(d == '4'); - assert(e == '2'); + + int i = Integer.parseInt("1234"); + + assert(i == 1234); + assert(e == '2' || i < 1234); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b92d19225fb..df224167f2b 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -190,6 +190,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); } else if(function_id == irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_of_int"); + } else if(function_id == irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_parse_int"); } } From 24cf61b66ca2a6c8cd88781baf59d3ebab8d39fc Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 14 Sep 2016 14:22:17 +0100 Subject: [PATCH 090/221] parsing of integer in strings for java --- regression/strings/java_int/test.desc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc index 8fbe98080b4..c380a5a30a7 100644 --- a/regression/strings/java_int/test.desc +++ b/regression/strings/java_int/test.desc @@ -5,5 +5,6 @@ test_int.class ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_int.java line 9: SUCCESS$ ^\[assertion.2\] assertion at file test_int.java line 10: SUCCESS$ -^\[assertion.3\] assertion at file test_int.java line 11: FAILURE$ +^\[assertion.3\] assertion at file test_int.java line 14: SUCCESS$ +^\[assertion.4\] assertion at file test_int.java line 15: FAILURE$ -- From 1e91533083ba657112263480c0a4cf081321158c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 14 Sep 2016 15:44:33 +0100 Subject: [PATCH 091/221] better handling of StringBuilder.append to allow chained append calls --- .../test_string_builder.class | Bin 1015 -> 1003 bytes .../test_string_builder.java | 6 +++--- src/goto-programs/pass_preprocess.cpp | 13 +++++++++---- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/regression/strings/java_string_builder/test_string_builder.class b/regression/strings/java_string_builder/test_string_builder.class index 0e472c293b34b5242899232200736cdc626afc32..7a61d1f02be71e77a94712f5fa7beb433a094b1b 100644 GIT binary patch delta 97 zcmey){+fNmB_{sU49q~tz)+>Nk97${+2n^zvTRzcM%x%zCvz}InQ1X_0VSCk*cezC v_!w9jM1d?>26hI0ptuPGH-k3=4?_|IFGD2*KZ6WVB|ii6Uk2~V3z)+Jv`!Ee delta 93 zcmaFO{+)fpB_{ss49q~tz)+{Pk97${)#QgvvRvWXTC7If7+Ax#C$lg|F&i=POipAL vRa0T$V9;UUWH4snVz6M~X7Fd=VMt@(WvFG~XOICJ!Oy__m%)GX6y|UM^y?Bt diff --git a/regression/strings/java_string_builder/test_string_builder.java b/regression/strings/java_string_builder/test_string_builder.java index d29581a373f..1d76b34e9f8 100644 --- a/regression/strings/java_string_builder/test_string_builder.java +++ b/regression/strings/java_string_builder/test_string_builder.java @@ -4,9 +4,9 @@ public static void main(String[] argv) { StringBuilder tmp = new StringBuilder(); tmp.append("prefix "); tmp.append(argv[1]); - tmp.append(" middle "); - tmp.append(argv[2]); - tmp.append(" end"); + tmp.append(" middle ").append(argv[2]).append(" end"); + //StringBuilder tmp1 = tmp.append(argv[2]); + //tmp1.append(" end"); String r = tmp.toString(); assert(r.startsWith("pref")); assert(r.endsWith("end")); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index df224167f2b..09fc1e990a3 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -72,8 +72,8 @@ void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functions goto_functions.function_map[irep_idt(function_name)]; } -void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt::instructionst::iterator & i_it, irep_idt function_name){ +void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt::instructionst::iterator & i_it, irep_idt function_name){ // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -98,7 +98,7 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g goto_functions.function_map[irep_idt(function_name)]; } -void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functionst & goto_functions, +void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name){ // replace "s.append(x)" by "s=__CPROVER_uninterpreted_strcat(s,x)" code_function_callt &function_call=to_code_function_call(i_it->code); @@ -117,11 +117,16 @@ void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functio for(int i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.arguments()[0], rhs); + code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); i_it->code=assignment; // make sure it is in the function map goto_functions.function_map[irep_idt(function_name)]; + + i_it = goto_program.insert_after(i_it); + i_it->make_assignment(); + i_it->code=assignment2; } @@ -177,7 +182,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { From 2c4395e8ab3e1b343754ff62c12d3cc652e5500d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Sep 2016 12:10:56 +0100 Subject: [PATCH 092/221] of int for negative numbers --- regression/strings/java_int/test.desc | 3 +- regression/strings/java_int/test_int.class | Bin 885 -> 943 bytes regression/strings/java_int/test_int.java | 7 ++- src/goto-programs/pass_preprocess.cpp | 11 +++- src/solvers/refinement/string_expr.cpp | 61 ++++++++++++++----- src/solvers/refinement/string_expr.h | 2 + src/solvers/refinement/string_functions.cpp | 4 ++ src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 1 + 9 files changed, 70 insertions(+), 20 deletions(-) diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc index c380a5a30a7..d33a6283f30 100644 --- a/regression/strings/java_int/test.desc +++ b/regression/strings/java_int/test.desc @@ -6,5 +6,6 @@ test_int.class ^\[assertion.1\] assertion at file test_int.java line 9: SUCCESS$ ^\[assertion.2\] assertion at file test_int.java line 10: SUCCESS$ ^\[assertion.3\] assertion at file test_int.java line 14: SUCCESS$ -^\[assertion.4\] assertion at file test_int.java line 15: FAILURE$ +^\[assertion.4\] assertion at file test_int.java line 18: SUCCESS$ +^\[assertion.5\] assertion at file test_int.java line 20: FAILURE$ -- diff --git a/regression/strings/java_int/test_int.class b/regression/strings/java_int/test_int.class index e846bb3de29ab5fcf9d4bc7b9c5525ad0cf09f08..ef050837eadc3adb208bcb49afd4885dcba1d226 100644 GIT binary patch delta 167 zcmey$ww`^1KNA8A4NG1kBAZf(FGx-sdvY{YDI)e~H x1A_>|3I:(Ljava/lang/String;)V")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 5645cd2e164..f9974dfb004 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -274,7 +274,7 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma assert(args.size() == 2); //bad args to string concat string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); + string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); @@ -349,54 +349,83 @@ constant_exprt constant_of_nat(int i,int width, typet t) { void string_exprt::of_int (const function_application_exprt &expr,axiom_vect & axioms) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - exprt i = args[0]; + assert(expr.arguments().size() == 1); + of_int(expr.arguments()[0],axioms,string_ref_typet::is_c_string_type(expr.type()),10); +} + +void string_exprt::of_long +(const function_application_exprt &expr,axiom_vect & axioms) +{ + assert(expr.arguments().size() == 1); + of_int(expr.arguments()[0],axioms,string_ref_typet::is_c_string_type(expr.type()),30); +} + + +void string_exprt::of_int +(const exprt &i,axiom_vect & axioms,bool is_c_string, int max_size) +{ typet type = i.type(); int width = type.get_unsigned_int(ID_width); exprt ten = constant_of_nat(10,width,type); exprt zero_char; exprt nine_char; + exprt minus_char; - if(string_ref_typet::is_c_string_type(expr.type())) { + if(is_c_string) { + minus_char = constant_of_nat(45,CHAR_WIDTH,string_ref_typet::char_type()); zero_char = constant_of_nat(48,CHAR_WIDTH,string_ref_typet::char_type()); nine_char = constant_of_nat(57,CHAR_WIDTH,string_ref_typet::char_type()); } else { + minus_char = constant_of_nat(45,JAVA_CHAR_WIDTH,string_ref_typet::java_char_type()); zero_char = constant_of_nat(48,JAVA_CHAR_WIDTH,string_ref_typet::java_char_type()); nine_char = constant_of_nat(57,JAVA_CHAR_WIDTH,string_ref_typet::java_char_type()); } - int max_size = 10; - axioms.emplace_back(and_exprt(*this > index_zero,*this <= string_ref_typet::index_of_int(max_size))); - for(int size=1; size<=max_size;size++) { exprt sum = constant_of_nat(0,width,type); exprt all_numbers = true_exprt(); - for(int j=0; j & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); + void of_long(const function_application_exprt &f, axiom_vect & axioms); + void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 4abc7b63700..de50f977905 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -16,6 +16,7 @@ Date: September 2016 #define string_equal_func "__CPROVER_uninterpreted_string_equal" #define string_char_at_func "__CPROVER_uninterpreted_char_at" #define string_concat_func "__CPROVER_uninterpreted_strcat" +#define string_concat_int_func "__CPROVER_uninterpreted_strcat_int" #define string_substring_func "__CPROVER_uninterpreted_substring" #define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" #define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" @@ -57,6 +58,9 @@ bool is_string_char_at_func(irep_idt id) { bool is_string_concat_func(irep_idt id) { return (starts_with(id2string(id),string_concat_func)); } +bool is_string_concat_int_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_int_func)); +} bool is_string_substring_func(irep_idt id) { return (starts_with(id2string(id),string_substring_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 4a35cc75182..6d3b562bd49 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -23,6 +23,7 @@ bool is_string_length_func(irep_idt id); bool is_string_equal_func(irep_idt id); bool is_string_char_at_func(irep_idt id); bool is_string_concat_func(irep_idt id); +bool is_string_concat_int_func(irep_idt id); bool is_string_substring_func(irep_idt id); bool is_string_is_prefix_func(irep_idt id); bool is_string_is_suffix_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 44dd9654b1a..4413f69da30 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -769,6 +769,7 @@ unsigned integer_of_expr(const constant_exprt & expr) { std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) { + if(size.id() != ID_constant) return "string of unknown size"; unsigned n = integer_of_expr(to_constant_expr(size)); if(n>500) return "very long string"; if(n==0) return "\"\""; From a874b87ec0980d1db31930a7e97bb6c1863903de Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Sep 2016 12:49:27 +0100 Subject: [PATCH 093/221] conversion between string and int for negative numbers --- regression/strings/java_int/test.desc | 7 +++-- regression/strings/java_int/test_int.class | Bin 943 -> 1003 bytes regression/strings/java_int/test_int.java | 9 +++--- src/solvers/refinement/string_expr.cpp | 29 ++++++++++--------- src/solvers/refinement/string_refinement.cpp | 24 +++++++++++---- 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc index d33a6283f30..f7d415ac530 100644 --- a/regression/strings/java_int/test.desc +++ b/regression/strings/java_int/test.desc @@ -5,7 +5,8 @@ test_int.class ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_int.java line 9: SUCCESS$ ^\[assertion.2\] assertion at file test_int.java line 10: SUCCESS$ -^\[assertion.3\] assertion at file test_int.java line 14: SUCCESS$ -^\[assertion.4\] assertion at file test_int.java line 18: SUCCESS$ -^\[assertion.5\] assertion at file test_int.java line 20: FAILURE$ +^\[assertion.3\] assertion at file test_int.java line 13: SUCCESS$ +^\[assertion.4\] assertion at file test_int.java line 16: SUCCESS$ +^\[assertion.5\] assertion at file test_int.java line 19: SUCCESS$ +^\[assertion.6\] assertion at file test_int.java line 21: FAILURE$ -- diff --git a/regression/strings/java_int/test_int.class b/regression/strings/java_int/test_int.class index ef050837eadc3adb208bcb49afd4885dcba1d226..26d3c692081d4934a3546442ac5220caf4be9006 100644 GIT binary patch delta 465 zcmYL_yDvmh5XOIJ@4b8OUU%0%EV~}-{aUWadL%?4{sbM3N<^cvjfzga*-j#;l(Hnd zLP9U0Q2G}X3awzyjYl&x=bJh6ecxQ@SH1M`d2YQ}uV2?X((VA3Z}qVhgam||Mt1hb_X$!>Xb zx4f~vQ`VGx;hn7p>SfiCgG%PiAE_)9vQlD7UR{!vWT)6b)yyDiiO~>L#K_PhwT!A2 zBDm6fs;)&2*3+?T+|u@Vdm%Su&J?aB~!>j{Yn`o=>g>7vA>7paP1pk;U6+c!GRJFGsX zxD~FSk&D|A>+OO>%4ZHR!_{+wPuP1yd@r7-G4`zE_O{LZ=>#p|hvM8}iYwxRki-6_ zhOLQf5=u#^*ocf8Q4n6n&-7pD<~SWhV*~~`eYACnW!_``U;F*Q^R_WUJKmp3A*Mm< E2j5ID{Qv*} diff --git a/regression/strings/java_int/test_int.java b/regression/strings/java_int/test_int.java index c23f4558b1a..33121560f10 100644 --- a/regression/strings/java_int/test_int.java +++ b/regression/strings/java_int/test_int.java @@ -1,7 +1,7 @@ public class test_int { public static void main(String[] argv) { - //StringBuilder s = new StringBuilder(); + String s = Integer.toString(2345); char c = s.charAt(1); char d = s.charAt(2); @@ -10,13 +10,14 @@ public static void main(String[] argv) { assert(d == '4'); int i = Integer.parseInt("1234"); - assert(i == 1234); - String t = Integer.toString(-2345); assert(t.charAt(0) == '-'); + + int j = Integer.parseInt("-4231"); + assert(j == -4231); - assert(e == '2' || i < 1234 || t.charAt(0) != '-'); + assert(e == '2' || i < 1234 || t.charAt(0) != '-' || j != -4231); } } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index f9974dfb004..eb69719472b 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -383,15 +383,17 @@ void string_exprt::of_int axioms.emplace_back(and_exprt(*this > index_zero,*this <= string_ref_typet::index_of_int(max_size))); + exprt chr = (*this)[string_ref_typet::index_of_int(0)]; + exprt starts_with_minus = equal_exprt(chr,minus_char); + exprt starts_with_digit = and_exprt + (binary_relation_exprt(chr,ID_ge,zero_char), + binary_relation_exprt(chr,ID_le,nine_char)); + axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); + for(int size=1; size<=max_size;size++) { exprt sum = constant_of_nat(0,width,type); exprt all_numbers = true_exprt(); - - exprt chr = (*this)[string_ref_typet::index_of_int(0)]; - exprt starts_with_minus = equal_exprt(chr,minus_char); - exprt starts_with_digit = and_exprt - (binary_relation_exprt(chr,ID_ge,zero_char), - binary_relation_exprt(chr,ID_le,nine_char)); + chr = (*this)[string_ref_typet::index_of_int(0)]; exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); for(int j=1; j1) { + axioms.emplace_back(and_exprt(premise,starts_with_digit), + not_exprt(equal_exprt((*this)[index_zero],zero_char))); + axioms.emplace_back(and_exprt(premise,starts_with_minus), + not_exprt(equal_exprt((*this)[string_ref_typet::index_of_int(1)],zero_char))); + } //we have to be careful when exceeding the maximal size of integers // Warning this should be different depending on max size diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 4413f69da30..d79296c276e 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -706,25 +706,39 @@ exprt string_refinementt::convert_string_parse_int symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); exprt zero_char; + exprt minus_char; + exprt plus_char; if(string_ref_typet::is_c_string_type(args[0].type())) { - debug() << "string_refinementt::convert_string_parse_int of c string" << eom; + plus_char = constant_of_nat(43,string_ref_typet::char_type()); + minus_char = constant_of_nat(45,string_ref_typet::char_type()); zero_char = constant_of_nat(48,string_ref_typet::char_type()); } else { - debug() << "string_refinementt::convert_string_parse_int of non c string" << eom; + plus_char = constant_of_nat(43,string_ref_typet::java_char_type()); + minus_char = constant_of_nat(45,string_ref_typet::java_char_type()); zero_char = constant_of_nat(48,string_ref_typet::java_char_type()); } exprt ten = constant_of_nat(10,type); + exprt chr = str[string_ref_typet::index_of_int(0)]; + exprt starts_with_minus = equal_exprt(chr,minus_char); + exprt starts_with_plus = equal_exprt(chr,plus_char); + exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); //and_exprt(binary_relation_exprt(chr,ID_le,nine_char)); + for(int size=1; size<=10;size++) { exprt sum = constant_of_nat(0,type); - - for(int j=0; j Date: Thu, 15 Sep 2016 20:04:51 +0100 Subject: [PATCH 094/221] corrected a mistake in the code for string refinement of if expressions --- src/solvers/refinement/string_expr.cpp | 30 +++++++++++--------- src/solvers/refinement/string_expr.h | 1 + src/solvers/refinement/string_refinement.cpp | 24 ++++++++++------ 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index eb69719472b..9d6777def8f 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -64,14 +64,19 @@ bool string_ref_typet::is_java_string_type(const typet &type) if(type.id() == ID_pointer) { pointer_typet pt = to_pointer_type(type); typet subtype = pt.subtype(); - if(subtype.id() == ID_struct) { - irep_idt tag = to_struct_type(subtype).get_tag(); - return (tag == irep_idt("java.lang.String")); - } - else return false; + return is_java_deref_string_type(subtype); } else return false; } +bool string_ref_typet::is_java_deref_string_type(const typet &type) +{ + if(type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return (tag == irep_idt("java.lang.String")); + } + else return false; +} + bool string_ref_typet::is_java_string_builder_type(const typet &type) { if(type.id() == ID_pointer) { @@ -108,13 +113,13 @@ void string_exprt::of_if(const if_exprt &expr, std::map assert(string_ref_typet::is_unrefined_string_type(expr.false_case().type())); string_exprt f = of_expr(expr.false_case(),symbol_to_string,axioms); - axioms.emplace_back(implies_exprt(expr.cond(),equal_exprt(length(),t.length()))); - symbol_exprt qvar = fresh_symbol("string_if",string_ref_typet::index_type()); + axioms.emplace_back(expr.cond(),equal_exprt(length(),t.length())); + symbol_exprt qvar = fresh_symbol("string_if_true",string_ref_typet::index_type()); axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,index_zero,t.length())); -; - axioms.emplace_back(implies_exprt(not_exprt(expr.cond()),equal_exprt(length(),f.length()))); -symbol_exprt qvar2 = fresh_symbol("string_if",string_ref_typet::index_type()); - axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar],f[qvar])).forall(qvar2,index_zero,f.length())); + + axioms.emplace_back(not_exprt(expr.cond()),equal_exprt(length(),f.length())); + symbol_exprt qvar2 = fresh_symbol("string_if_false",string_ref_typet::index_type()); + axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])).forall(qvar2,index_zero,f.length())); } @@ -336,8 +341,7 @@ void string_exprt::of_string_substring axioms.emplace_back(str >= j); // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt(index_exprt(content(),idx), - str[plus_exprt(i, idx)])); + string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(i, idx)])); axioms.push_back(a.forall(idx,index_zero,length())); } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index c67617d63e5..f512602f203 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -47,6 +47,7 @@ class string_ref_typet : public struct_typet { static bool is_c_string_type(const typet & type); static bool is_java_string_type(const typet & type); + static bool is_java_deref_string_type(const typet & type); static bool is_java_string_builder_type(const typet & type); static inline bool is_unrefined_string_type(const typet & type) { return (is_c_string_type(type) || is_java_string_type(type) || is_java_string_builder_type(type)); } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index d79296c276e..1e7ca487d8f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -100,6 +100,8 @@ void string_refinementt::post_process() debug() << not_contains_axioms.size() << " not_contains constraints" << eom; nb_sat_iteration = 0; + debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; + update_index_set(universal_axioms); update_index_set(cur); cur.clear(); @@ -159,6 +161,13 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) make_string(sym,expr.rhs()); return false; } + else if(string_ref_typet::is_java_deref_string_type(type)) { + debug() << "string_refinementt::boolbv_set_equality_to_true: warning" + << " non pointer string " << eom; + symbol_exprt sym = to_symbol_expr(expr.lhs()); + make_string(sym,expr.rhs()); + return false; + } else if(type == char_type) { const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); @@ -316,7 +325,7 @@ void string_refinementt::add_lemma(const exprt &lemma) { if (!seen_instances.insert(lemma).second) return; - if(lemma == true_exprt()) { debug() << "add_lemma : tautology" << eom; return; }// tautology + if(lemma == true_exprt()) { debug() << "string_refinementt::add_lemma : tautology" << eom; return; } debug() << "adding lemma " << pretty_short(lemma) << eom; @@ -1083,12 +1092,12 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con } } - if (!found) { - // we should add a lemma to say that val == f - debug() << "not sure we need to add a lemma: to say val == f" << eom; - add_lemma(equal_exprt(val,f)); - return qvar; + debug() << "string_refinementt::compute_subst: qvar not found" << eom; + debug() << "qvar = " << qvar.pretty() << eom + << "val = " << val.pretty() << eom + << "f = " << f.pretty() << eom; + assert(false); } return sum_of_map(elems,neg); @@ -1132,7 +1141,6 @@ void string_refinementt::update_index_set(const std::vector & cur) { void string_refinementt::update_index_set(const string_constraintt &axiom) { - debug() << "string_refinementt::update_index_set needs to be rewriten" << eom; assert(axiom.is_univ_quant()); std::vector bounds; get_bounds(axiom.get_univ_var(), axiom.premise(), bounds); @@ -1150,7 +1158,6 @@ void string_refinementt::update_index_set(const string_constraintt &axiom) // if cur is of the form s[i] and no quantified variable appears in i if(!has_quant_var){ - assert(s.type() == string_type.get_content_type()); current_index_set[s].insert(bounds.begin(), bounds.end()); current_index_set[s].insert(i); index_set[s].insert(bounds.begin(), bounds.end()); @@ -1167,7 +1174,6 @@ void string_refinementt::update_index_set(const string_constraintt &axiom) void string_refinementt::update_index_set(const exprt &formula) { - debug() << "string_refinementt::update_index_set needs to be rewriten" << eom; std::vector to_process; to_process.push_back(formula); From 99add90c734ea4691d2e32d3560750d16ab63c37 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Sep 2016 10:06:33 +0100 Subject: [PATCH 095/221] easychair example from TACAS09 (Path feasability analysis for string-manipulating programs --- .../strings/java_easychair/easychair.class | Bin 0 -> 1164 bytes .../strings/java_easychair/easychair.java | 34 ++++++++++++++++++ regression/strings/java_easychair/test.desc | 7 ++++ 3 files changed, 41 insertions(+) create mode 100644 regression/strings/java_easychair/easychair.class create mode 100644 regression/strings/java_easychair/easychair.java create mode 100644 regression/strings/java_easychair/test.desc diff --git a/regression/strings/java_easychair/easychair.class b/regression/strings/java_easychair/easychair.class new file mode 100644 index 0000000000000000000000000000000000000000..e47900cc0b20ba70177dddd97c472c178867b054 GIT binary patch literal 1164 zcmZuwTTc^F5dKcP?Y7JILJJk7UQmQyq*V|_ZUP0gittdP0Tbi4UCUzG;_epoMc+;I z-Nq+l;xn2oi6r>$Z^Fx*3mi-btBR&G#1fBYSCn-nTUGQ* zwqO~WUK!?vfr6!!p50g096aqH;wFP{q*UGKmkPDIQBr3#&K6V^^JQsS(TogdlhKBD zhVZ}4JU=937$Y)9F(%^{#u@z6RGj0*GA1y|ATC?h+E6wtBZnytnx=U-Ha0ReKvi2; zGo{+9j2YZ!kSeuWrMjPq;S@vLQPYV7jiwEwW>BNUDMj3ok;mO*GtL)R)RINwo*)TB zYvN>~yj4}NSj&#!d4{H{Vp@5eBDNlN<7deL;Wpa(qo6*ot9nTtPSOoarllB``B39cPn?QCu|)plHeRAqs?_9I<=*NJedtKP9PL8L zSXnhSLoFZ5Nl(M7(*ZrPC3MmwZKdbV!fl`npvVon1+|JU{_=Gpxa4n{UzAd8=~;v?46;j9hMX#4|&&2(INV#7Pv z8xd{z8axy6+mH?;AP4kP``;Ul4AfX&cRp zTZnw;GrOFb#}J}epxHh2M|x>JKdmpJ8!|EoVh~|Wk{k 1){ + String str = new String(argv[1]); + if(str.length() < 40){ + + // containing "/" and containing "EasyChair" + int lastSlash = str.lastIndexOf('/'); + if(lastSlash < 0) return ; + + String rest = str.substring(lastSlash + 1); + // warning: removed this because contains is not efficient at the moment + if(! rest.contains("EasyChair")) return ; + // (2) Check that str starts with "http://" + if(! str.startsWith("http://")) return ; + // (3) Take the string between "http://" and the last "/". + // if it starts with "www." strip the "www." off + String t = str.substring("http://".length(),lastSlash - "http://".length()); + if(t.startsWith("www.")) + t = t.substring("www.".length()); + + // + //(4) Check that after stripping we have either "live.com" + // or "google.com" + if(!t.equals("live.com") && !t.equals("google.com")) + return ; + // s survived all checks + assert(false); //return true; + } + } + } + +} diff --git a/regression/strings/java_easychair/test.desc b/regression/strings/java_easychair/test.desc new file mode 100644 index 00000000000..bd8da8ab993 --- /dev/null +++ b/regression/strings/java_easychair/test.desc @@ -0,0 +1,7 @@ +CORE +easychair.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file easychair.java line 29: FAILURE$ +-- From 26be0a4f05f78a3d16cba76b4ee8a1dd749825e3 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Sep 2016 10:30:50 +0100 Subject: [PATCH 096/221] Separating the classes for the refined string type and string expressions --- .../refinement/refined_string_type.cpp | 63 +++++++++++++++++++ src/solvers/refinement/refined_string_type.h | 57 +++++++++++++++++ 2 files changed, 120 insertions(+) create mode 100644 src/solvers/refinement/refined_string_type.cpp create mode 100644 src/solvers/refinement/refined_string_type.h diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp new file mode 100644 index 00000000000..d202fbcd567 --- /dev/null +++ b/src/solvers/refinement/refined_string_type.cpp @@ -0,0 +1,63 @@ +/** -*- C++ -*- *****************************************************\ + +Module: Type of string expressions for PASS algorithm + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#include +#include + +refined_string_typet::refined_string_typet(unsignedbv_typet char_type) : struct_typet() { + components().resize(2); + components()[0].set_name("length"); + components()[0].set_pretty_name("length"); + components()[0].type()=refined_string_typet::index_type(); + + array_typet char_array(char_type,infinity_exprt(refined_string_typet::index_type())); + components()[1].set_name("content"); + components()[1].set_pretty_name("content"); + components()[1].type()=char_array; +} + +bool refined_string_typet::is_c_string_type(const typet &type) +{ + if (type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return (tag == irep_idt("__CPROVER_string")); + } else return false; +} + +bool refined_string_typet::is_java_string_type(const typet &type) +{ + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + return is_java_deref_string_type(subtype); + } else return false; +} + +bool refined_string_typet::is_java_deref_string_type(const typet &type) +{ + if(type.id() == ID_struct) { + irep_idt tag = to_struct_type(type).get_tag(); + return (tag == irep_idt("java.lang.String")); + } + else return false; +} + +bool refined_string_typet::is_java_string_builder_type(const typet &type) +{ + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_struct) { + irep_idt tag = to_struct_type(subtype).get_tag(); + return (tag == irep_idt("java.lang.StringBuilder")); + } + else return false; + } else return false; +} + diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h new file mode 100644 index 00000000000..383989254ea --- /dev/null +++ b/src/solvers/refinement/refined_string_type.h @@ -0,0 +1,57 @@ +/** -*- C++ -*- *****************************************************\ + +Module: Type of string expressions for PASS algorithm + (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#ifndef CPROVER_SOLVER_REFINED_STRING_TYPE_H +#define CPROVER_SOLVER_REFINED_STRING_TYPE_H + +#include +#include + +#define STRING_SOLVER_INDEX_WIDTH 32 +#define STRING_SOLVER_CHAR_WIDTH 8 +#define JAVA_STRING_SOLVER_CHAR_WIDTH 16 + +// Internal type used for string refinement +class refined_string_typet : public struct_typet { +public: + refined_string_typet(unsignedbv_typet char_type); + + // Type for the content (list of characters) of a string + inline array_typet get_content_type() + { return to_array_type((to_struct_type(*this)).components()[1].type());} + + // Types used in this refinement + static inline unsignedbv_typet char_type() { return unsignedbv_typet(STRING_SOLVER_CHAR_WIDTH);} + + static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(JAVA_STRING_SOLVER_CHAR_WIDTH);} + + static inline signedbv_typet index_type() { return signedbv_typet(STRING_SOLVER_INDEX_WIDTH);} + + static inline exprt index_zero() { return constant_exprt(integer2binary(0, STRING_SOLVER_INDEX_WIDTH), index_type());} + + // For C the unrefined string type is __CPROVER_string, for java it is a + // pointer to a strict with tag java.lang.String + + static bool is_c_string_type(const typet & type); + static bool is_java_string_type(const typet & type); + static bool is_java_deref_string_type(const typet & type); + static bool is_java_string_builder_type(const typet & type); + static inline bool is_unrefined_string_type(const typet & type) + { return (is_c_string_type(type) || is_java_string_type(type) || is_java_string_builder_type(type)); } + static inline bool is_unrefined_string(const exprt & expr) + { return (is_unrefined_string_type(expr.type())); } + + static inline constant_exprt index_of_int(int i) { + return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), index_type()); + } + +}; + + +#endif From 20cd62362295451d1e752796e32e9686cdd23abd Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Sep 2016 10:30:54 +0100 Subject: [PATCH 097/221] Separating the classes for the refined string type and string expressions --- src/solvers/Makefile | 1 + src/solvers/refinement/string_expr.cpp | 160 +++++-------------- src/solvers/refinement/string_expr.h | 50 +----- src/solvers/refinement/string_refinement.cpp | 89 +++++------ src/solvers/refinement/string_refinement.h | 5 +- 5 files changed, 94 insertions(+), 211 deletions(-) diff --git a/src/solvers/Makefile b/src/solvers/Makefile index de48d8b37eb..4003e19c39a 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -120,6 +120,7 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ refinement/refine_arrays.cpp \ refinement/string_constraint.cpp \ refinement/string_functions.cpp \ + refinement/refined_string_type.cpp \ refinement/string_expr.cpp \ refinement/string_refinement.cpp \ miniBDD/miniBDD.cpp diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 9d6777def8f..5b5ccfa1db7 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -10,34 +10,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -// For debuggin -#include - -string_ref_typet::string_ref_typet() : struct_typet() { - components().resize(2); - components()[0].set_name("length"); - components()[0].set_pretty_name("length"); - components()[0].type()=string_ref_typet::index_type(); - - array_typet char_array(string_ref_typet::char_type(),infinity_exprt(string_ref_typet::index_type())); - components()[1].set_name("content"); - components()[1].set_pretty_name("content"); - components()[1].type()=char_array; -} - -string_ref_typet::string_ref_typet(unsignedbv_typet char_type) : struct_typet() { - components().resize(2); - components()[0].set_name("length"); - components()[0].set_pretty_name("length"); - components()[0].type()=string_ref_typet::index_type(); - - array_typet char_array(char_type,infinity_exprt(string_ref_typet::index_type())); - components()[1].set_name("content"); - components()[1].set_pretty_name("content"); - components()[1].type()=char_array; -} - -exprt index_zero = string_ref_typet::index_zero(); +exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; @@ -51,91 +24,46 @@ symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -bool string_ref_typet::is_c_string_type(const typet &type) -{ - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return (tag == irep_idt("__CPROVER_string")); - } else return false; -} -bool string_ref_typet::is_java_string_type(const typet &type) +string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(refined_string_typet(char_type)) { - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - return is_java_deref_string_type(subtype); - } else return false; -} - -bool string_ref_typet::is_java_deref_string_type(const typet &type) -{ - if(type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return (tag == irep_idt("java.lang.String")); - } - else return false; -} - -bool string_ref_typet::is_java_string_builder_type(const typet &type) -{ - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - if(subtype.id() == ID_struct) { - irep_idt tag = to_struct_type(subtype).get_tag(); - return (tag == irep_idt("java.lang.StringBuilder")); - } - else return false; - } else return false; -} - -string_exprt::string_exprt() : struct_exprt(string_ref_typet()) -{ - string_ref_typet t; - symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); + refined_string_typet t(char_type); + symbol_exprt length = fresh_symbol("string_length",refined_string_typet::index_type()); symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); move_to_operands(length,content); } -string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(string_ref_typet(char_type)) -{ - string_ref_typet t(char_type); - symbol_exprt length = fresh_symbol("string_length",string_ref_typet::index_type()); - symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); - move_to_operands(length,content); -} void string_exprt::of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { - assert(string_ref_typet::is_unrefined_string_type(expr.true_case().type())); + assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); string_exprt t = of_expr(expr.true_case(),symbol_to_string,axioms); - assert(string_ref_typet::is_unrefined_string_type(expr.false_case().type())); + assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); string_exprt f = of_expr(expr.false_case(),symbol_to_string,axioms); axioms.emplace_back(expr.cond(),equal_exprt(length(),t.length())); - symbol_exprt qvar = fresh_symbol("string_if_true",string_ref_typet::index_type()); + symbol_exprt qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,index_zero,t.length())); axioms.emplace_back(not_exprt(expr.cond()),equal_exprt(length(),f.length())); - symbol_exprt qvar2 = fresh_symbol("string_if_false",string_ref_typet::index_type()); + symbol_exprt qvar2 = fresh_symbol("string_if_false",refined_string_typet::index_type()); axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])).forall(qvar2,index_zero,f.length())); } string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { - if(string_ref_typet::is_c_string_type(sym.type())) { + if(refined_string_typet::is_c_string_type(sym.type())) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(string_ref_typet::char_type()); + symbol_to_string[id]= string_exprt(refined_string_typet::char_type()); return symbol_to_string[id]; } else return f->second; } else { // otherwise we assume it is a java string irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(string_ref_typet::java_char_type()); + symbol_to_string[id]= string_exprt(refined_string_typet::java_char_type()); return symbol_to_string[id]; } else return f->second; } @@ -146,10 +74,10 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map index_zero,*this <= string_ref_typet::index_of_int(max_size))); + axioms.emplace_back(and_exprt(*this > index_zero,*this <= refined_string_typet::index_of_int(max_size))); - exprt chr = (*this)[string_ref_typet::index_of_int(0)]; + exprt chr = (*this)[refined_string_typet::index_of_int(0)]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_digit = and_exprt (binary_relation_exprt(chr,ID_ge,zero_char), @@ -397,11 +325,11 @@ void string_exprt::of_int for(int size=1; size<=max_size;size++) { exprt sum = constant_of_nat(0,width,type); exprt all_numbers = true_exprt(); - chr = (*this)[string_ref_typet::index_of_int(0)]; + chr = (*this)[refined_string_typet::index_of_int(0)]; exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); for(int j=1; j #include #include +#include -#define INDEX_WIDTH 32 -#define CHAR_WIDTH 8 -#define JAVA_CHAR_WIDTH 16 - - -// Internal type used for strings -class string_ref_typet : public struct_typet { -public: - // default is with C type of characters - string_ref_typet(); - string_ref_typet(unsignedbv_typet char_type); - - // Type for the content (list of characters) of a string - inline array_typet get_content_type() - { return to_array_type((to_struct_type(*this)).components()[1].type());} - - // Types used in this refinement - static inline unsignedbv_typet char_type() { return unsignedbv_typet(CHAR_WIDTH);} - - static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(JAVA_CHAR_WIDTH);} - - //unsignedbv_typet index_type(INDEX_WIDTH); - static inline signedbv_typet index_type() { return signedbv_typet(INDEX_WIDTH);} - - static inline exprt index_zero() { return constant_exprt(integer2binary(0, INDEX_WIDTH), index_type());} - - // For C the unrefined string type is __CPROVER_string, for java it is a - // pointer to a strict with tag java.lang.String - - static bool is_c_string_type(const typet & type); - static bool is_java_string_type(const typet & type); - static bool is_java_deref_string_type(const typet & type); - static bool is_java_string_builder_type(const typet & type); - static inline bool is_unrefined_string_type(const typet & type) - { return (is_c_string_type(type) || is_java_string_type(type) || is_java_string_builder_type(type)); } - static inline bool is_unrefined_string(const exprt & expr) - { return (is_unrefined_string_type(expr.type())); } - - static inline constant_exprt index_of_int(int i) { - return constant_exprt(integer2binary(i, INDEX_WIDTH), index_type()); - } - -}; typedef std::vector axiom_vect; // Expressions that encode strings class string_exprt : public struct_exprt { public: - string_exprt(); + // Initialize string from the type of characters string_exprt(unsignedbv_typet char_type); + // Default uses C character type + string_exprt() : string_exprt(refined_string_typet::char_type()) {}; + + // Add to the list of axioms, lemmas which should hold for the string to be // equal to the given expression. diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 1e7ca487d8f..3d82ff7cf52 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -20,12 +20,12 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -unsignedbv_typet char_type = string_ref_typet::char_type(); -signedbv_typet index_type = string_ref_typet::index_type(); -unsignedbv_typet java_char_type = string_ref_typet::java_char_type(); +unsignedbv_typet char_type = refined_string_typet::char_type(); +signedbv_typet index_type = refined_string_typet::index_type(); +unsignedbv_typet java_char_type = refined_string_typet::java_char_type(); -constant_exprt zero = string_ref_typet::index_of_int(0); +constant_exprt zero = refined_string_typet::index_of_int(0); // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { @@ -93,8 +93,8 @@ void string_refinementt::post_process() assert(string_axioms[i].is_not_contains()); string_axioms[i].witness = string_exprt::fresh_symbol ("not_contains_witness", - array_typet(string_ref_typet::index_type(), - infinity_exprt(string_ref_typet::index_type()))); + array_typet(refined_string_typet::index_type(), + infinity_exprt(refined_string_typet::index_type()))); not_contains_axioms.push_back(string_axioms[i]); } debug() << not_contains_axioms.size() << " not_contains constraints" << eom; @@ -156,12 +156,12 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - if(string_ref_typet::is_unrefined_string_type(type)) { + if(refined_string_typet::is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; } - else if(string_ref_typet::is_java_deref_string_type(type)) { + else if(refined_string_typet::is_java_deref_string_type(type)) { debug() << "string_refinementt::boolbv_set_equality_to_true: warning" << " non pointer string " << eom; symbol_exprt sym = to_symbol_expr(expr.lhs()); @@ -199,7 +199,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; - if (string_ref_typet::is_unrefined_string_type(type)) { + if (refined_string_typet::is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality string_exprt str = string_of_symbol(to_symbol_expr(expr)); @@ -207,8 +207,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) return bv; } else if (expr.type() == char_type) { bvt bv; - bv.resize(CHAR_WIDTH); - map.get_literals(identifier, char_type, CHAR_WIDTH, bv); + bv.resize(STRING_SOLVER_CHAR_WIDTH); + map.get_literals(identifier, char_type, STRING_SOLVER_CHAR_WIDTH, bv); forall_literals(it, bv) if(it->var_no()>=prop.no_variables() && !it->is_constant()) @@ -219,8 +219,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) return bv; } else if (expr.type() == java_char_type) { bvt bv; - bv.resize(JAVA_CHAR_WIDTH); - map.get_literals(identifier, java_char_type, JAVA_CHAR_WIDTH, bv); + bv.resize(JAVA_STRING_SOLVER_CHAR_WIDTH); + map.get_literals(identifier, java_char_type, JAVA_STRING_SOLVER_CHAR_WIDTH, bv); forall_literals(it, bv) if(it->var_no()>=prop.no_variables() && !it->is_constant()) @@ -359,10 +359,10 @@ void string_refinementt::add_lemma(const exprt &lemma) string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ - if(string_ref_typet::is_java_string_type(sym.type()) + if(refined_string_typet::is_java_string_type(sym.type()) && starts_with(std::string(sym.get(ID_identifier).c_str()),"java::java.lang.String.Literal.")) { string_exprt s; - s.of_string_constant(string_exprt::extract_java_string(sym),JAVA_CHAR_WIDTH,string_ref_typet::java_char_type(),string_axioms); + s.of_string_constant(string_exprt::extract_java_string(sym),JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type(),string_axioms); return s; } else { @@ -439,7 +439,7 @@ bvt string_refinementt::convert_string_length( } exprt string_refinementt::is_positive(const exprt & x) -{ return binary_relation_exprt(x, ID_ge, string_ref_typet::index_of_int(0)); } +{ return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } bvt string_refinementt::convert_string_is_prefix @@ -561,7 +561,7 @@ bvt string_refinementt::convert_string_contains( string_axioms.push_back (string_constraintt::not_contains - (zero,plus_exprt(string_ref_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), + (zero,plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); return convert_bv(tc_contains); @@ -604,8 +604,8 @@ bvt string_refinementt::convert_string_index_of( // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) // && forall n. 0 < n < i => s[n] != c - string_axioms.push_back(string_constraintt(equal_exprt(index,string_ref_typet::index_of_int(-1)),not_exprt(contains)).exists(index,string_ref_typet::index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,string_ref_typet::index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); @@ -637,12 +637,12 @@ bvt string_refinementt::convert_string_last_index_of( c = typecast_exprt(c,java_char_type); } - string_axioms.push_back(string_constraintt(equal_exprt(index,string_ref_typet::index_of_int(-1)),not_exprt(contains)).exists(index,string_ref_typet::index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,string_ref_typet::index_of_int(-1))); + string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,string_ref_typet::index_of_int(1)),str.length())); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),str.length())); symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); @@ -668,7 +668,7 @@ bvt string_refinementt::convert_char_literal( irep_idt sval = s.get_value(); assert(sval.size() == 1); - std::string binary=integer2binary(unsigned(sval[0]), CHAR_WIDTH); + std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); return convert_bv(constant_exprt(binary, char_type)); } @@ -717,20 +717,20 @@ exprt string_refinementt::convert_string_parse_int exprt zero_char; exprt minus_char; exprt plus_char; - if(string_ref_typet::is_c_string_type(args[0].type())) { - plus_char = constant_of_nat(43,string_ref_typet::char_type()); - minus_char = constant_of_nat(45,string_ref_typet::char_type()); - zero_char = constant_of_nat(48,string_ref_typet::char_type()); + if(refined_string_typet::is_c_string_type(args[0].type())) { + plus_char = constant_of_nat(43,refined_string_typet::char_type()); + minus_char = constant_of_nat(45,refined_string_typet::char_type()); + zero_char = constant_of_nat(48,refined_string_typet::char_type()); } else { - plus_char = constant_of_nat(43,string_ref_typet::java_char_type()); - minus_char = constant_of_nat(45,string_ref_typet::java_char_type()); - zero_char = constant_of_nat(48,string_ref_typet::java_char_type()); + plus_char = constant_of_nat(43,refined_string_typet::java_char_type()); + minus_char = constant_of_nat(45,refined_string_typet::java_char_type()); + zero_char = constant_of_nat(48,refined_string_typet::java_char_type()); } exprt ten = constant_of_nat(10,type); - exprt chr = str[string_ref_typet::index_of_int(0)]; + exprt chr = str[refined_string_typet::index_of_int(0)]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_plus = equal_exprt(chr,plus_char); exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); //and_exprt(binary_relation_exprt(chr,ID_le,nine_char)); @@ -740,11 +740,11 @@ exprt string_refinementt::convert_string_parse_int exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); for(int j=1; j string_refinementt::map_of_sum(const exprt &f) { exprt string_refinementt::sum_of_map(std::map & m, bool negated) { - exprt sum = string_ref_typet::string_ref_typet::index_of_int(0); + exprt sum = refined_string_typet::refined_string_typet::index_of_int(0); for (std::map::iterator it = m.begin(); it != m.end(); it++) { @@ -1039,10 +1039,10 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { int second = negated?(-it->second):it->second; if (second != 0) if (second == -1) - if(sum == string_ref_typet::index_of_int(0)) sum = unary_minus_exprt(t); + if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); else sum = minus_exprt(sum,t); else if (second == 1) - if(sum == string_ref_typet::index_of_int(0)) sum = t; + if(sum == refined_string_typet::index_of_int(0)) sum = t; else sum = plus_exprt(sum, t); else { debug() << "in string_refinementt::sum_of_map:" @@ -1183,17 +1183,10 @@ void string_refinementt::update_index_set(const exprt &formula) if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - if(s.type() == string_type.get_content_type()){ - const exprt &simplified = simplify_sum(i); - if(index_set[s].insert(simplified).second) - current_index_set[s].insert(simplified); - } else { - debug() << "update_index_set: index expression of non string" << eom - << "Warning: concidering it as a string anyway" << eom; - const exprt &simplified = simplify_sum(i); - if(index_set[s].insert(simplified).second) - current_index_set[s].insert(simplified); - } + assert(s.type().id() == ID_array); + const exprt &simplified = simplify_sum(i); + if(index_set[s].insert(simplified).second) + current_index_set[s].insert(simplified); } else { forall_operands(it, cur) { to_process.push_back(*it); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index c8ed63301c2..3253762556b 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -43,10 +43,9 @@ class string_refinementt: public bv_refinementt typedef bv_refinementt SUB; // for now this is C string type but this probably needs to be generalized - string_ref_typet string_type; + //refined_string_typet string_type; - inline size_t get_string_width() - { return boolbv_width(string_type);} + //inline size_t get_string_width() { return boolbv_width(string_type);} protected: From 39e4cccfe41aa9e54f2322eb7d7a0fb1709d63f5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Sep 2016 11:03:05 +0100 Subject: [PATCH 098/221] clening the code of string refinement of useless functions --- src/solvers/refinement/refined_string_type.h | 15 ++-- src/solvers/refinement/string_expr.cpp | 57 ++------------- src/solvers/refinement/string_expr.h | 8 +-- src/solvers/refinement/string_refinement.cpp | 73 ++------------------ src/solvers/refinement/string_refinement.h | 11 +-- 5 files changed, 25 insertions(+), 139 deletions(-) diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index 383989254ea..630de497434 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -39,17 +39,24 @@ class refined_string_typet : public struct_typet { // pointer to a strict with tag java.lang.String static bool is_c_string_type(const typet & type); + static bool is_java_string_type(const typet & type); + static bool is_java_deref_string_type(const typet & type); + static bool is_java_string_builder_type(const typet & type); + static inline bool is_unrefined_string_type(const typet & type) - { return (is_c_string_type(type) || is_java_string_type(type) || is_java_string_builder_type(type)); } + { return (is_c_string_type(type) + || is_java_string_type(type) + || is_java_string_builder_type(type)); } + static inline bool is_unrefined_string(const exprt & expr) { return (is_unrefined_string_type(expr.type())); } - static inline constant_exprt index_of_int(int i) { - return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), index_type()); - } + static inline constant_exprt index_of_int(int i) + { return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), + index_type()); } }; diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 5b5ccfa1db7..fe8b75fd635 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -91,11 +91,8 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) -{ - // Warning: we do nothing here!!!! - return; -} - void string_exprt::of_function_application(const function_application_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms) { const exprt &name = expr.function(); @@ -123,8 +113,6 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_concat(expr,symbol_to_string,axioms); } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); - } else if (is_string_char_set_func(id)) { - return of_string_char_set(expr,symbol_to_string,axioms); } else if (is_string_empty_string_func(id)) { return of_empty_string(expr,axioms); } else if (is_string_copy_func(id)) { @@ -211,11 +199,6 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); - // We can run into problems if the length of the string exceed 32 bits? - //binary_relation_exprt lem1(length(), ID_ge, s1.length()); - //axioms.push_back(string_constraintt(lem1)); - //binary_relation_exprt lem2(length(), ID_ge, s2.length()); - //axioms.push_back(string_constraintt(lem2)); symbol_exprt idx = fresh_symbol("QA_index_concat",refined_string_typet::index_type()); @@ -233,7 +216,7 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma void string_exprt::of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); //bad args to string copy + assert(args.size() == 1); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); axioms.emplace_back(equal_exprt(length(), s1.length())); @@ -254,13 +237,9 @@ void string_exprt::of_string_substring assert(i.type() == refined_string_typet::index_type()); exprt j; - if(args.size() == 3){ - j = args[2]; - assert(j.type() == refined_string_typet::index_type()); - } - else { - j = str.length(); - } + if(args.size() == 3) j = args[2]; + else j = str.length(); + assert(j.type() == refined_string_typet::index_type()); symbol_exprt idx = fresh_symbol("index_substring", refined_string_typet::index_type()); @@ -362,27 +341,3 @@ void string_exprt::of_int } } - - -void string_exprt::of_string_char_set -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); //bad args to string_char_set? - - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - symbol_exprt c = fresh_symbol("char", refined_string_typet::char_type()); - - //THIS HAS NOT BEEN CHECKED: - axioms.emplace_back(equal_exprt(c,args[2])); - with_exprt sarrnew(str.content(), args[1], c); - implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), - and_exprt(equal_exprt(content(), - // update_exprt(str.content(), args[1], c)), - sarrnew), - equal_exprt(length(), str.length()))); - axioms.push_back(lemma); - -} - - diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 3657baf73cb..b1c63bb3881 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -23,13 +23,12 @@ typedef std::vector axiom_vect; // Expressions that encode strings class string_exprt : public struct_exprt { public: + // Initialize string from the type of characters string_exprt(unsignedbv_typet char_type); // Default uses C character type string_exprt() : string_exprt(refined_string_typet::char_type()) {}; - - // Add to the list of axioms, lemmas which should hold for the string to be // equal to the given expression. @@ -41,10 +40,10 @@ class string_exprt : public struct_exprt { // Generate a new symbol of the given type tp with a prefix static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); - // Expression corresponding to the length of the string inline const exprt & length() const { return op0();}; + // Expression corresponding to the content (array of characters) of the string inline const exprt & content() const { return op1();}; @@ -82,7 +81,6 @@ class string_exprt : public struct_exprt { void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); @@ -91,8 +89,6 @@ class string_exprt : public struct_exprt { void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); - void of_struct(const struct_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms); - static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 3d82ff7cf52..1878f81ae38 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -23,8 +23,6 @@ Author: Alberto Griggio, alberto.griggio@gmail.com unsignedbv_typet char_type = refined_string_typet::char_type(); signedbv_typet index_type = refined_string_typet::index_type(); unsignedbv_typet java_char_type = refined_string_typet::java_char_type(); - - constant_exprt zero = refined_string_typet::index_of_int(0); // Succinct version of pretty() @@ -35,17 +33,6 @@ std::string string_refinementt::pretty_short(const exprt & expr) { return string_value; } - -std::string string_refinementt::constraint_to_string(const string_constraintt & sc) { - if(sc.is_simple()) return(pretty_short(sc)); - else if(sc.is_univ_quant()) - return ("forall " + pretty_short(sc.get_univ_var()) + ". (" - + pretty_short(sc)); - else - return "forall QA. exists QE s1 != s2 ..."; -} - - string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { @@ -56,16 +43,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): } -string_refinementt::~string_refinementt() -{ -} - - - -/////////////////////// -// String refinement // -/////////////////////// - void string_refinementt::display_index_set() { for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { @@ -117,7 +94,6 @@ void string_refinementt::post_process() debug()<< "post_process: " << initial_loop_bound << " steps skipped" << eom; - display_index_set(); debug()<< "instantiating NOT_CONTAINS constraints" << eom; for(int i=0; i & out) +// Gets the upper bounds that are applied to [qvar], in the expression [expr] +void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) { std::vector to_treat; to_treat.push_back(expr); @@ -998,8 +937,6 @@ namespace { } } -} // namespace - std::map< exprt, int> string_refinementt::map_of_sum(const exprt &f) { @@ -1064,7 +1001,7 @@ exprt string_refinementt::simplify_sum(const exprt &f) { return sum_of_map(map); } -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) //, exprt & positive, exprt & negative) +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { exprt positive, negative; // number of time the element should be added (can be negative) diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 3253762556b..f31a15a2ffc 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -20,7 +20,7 @@ class string_refinementt: public bv_refinementt { public: string_refinementt(const namespacet &_ns, propt &_prop); - ~string_refinementt(); + ~string_refinementt() {}; // Should we use counter examples at each iteration? bool use_counter_example; @@ -42,11 +42,6 @@ class string_refinementt: public bv_refinementt private: typedef bv_refinementt SUB; - // for now this is C string type but this probably needs to be generalized - //refined_string_typet string_type; - - //inline size_t get_string_width() { return boolbv_width(string_type);} - protected: typedef std::set expr_sett; @@ -185,10 +180,6 @@ class string_refinementt: public bv_refinementt // succinct and pretty way to display an expression std::string pretty_short(const exprt & expr); - // string to display a constraint - std::string constraint_to_string(const string_constraintt & sc); - - }; #endif From fef67d795394342d2da8f0176acf092500ff3bf1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Sep 2016 15:20:06 +0100 Subject: [PATCH 099/221] incremental string solver for better performances --- regression/strings/test_contains/test.c | 13 +- regression/strings/test_index_of/test.c | 3 +- regression/strings/test_index_of/test.desc | 7 +- src/solvers/refinement/string_expr.cpp | 19 ++ src/solvers/refinement/string_expr.h | 1 + src/solvers/refinement/string_refinement.cpp | 188 +++++++++++-------- src/solvers/refinement/string_refinement.h | 6 +- 7 files changed, 146 insertions(+), 91 deletions(-) diff --git a/regression/strings/test_contains/test.c b/regression/strings/test_contains/test.c index 70480208116..9e7c627f3c4 100644 --- a/regression/strings/test_contains/test.c +++ b/regression/strings/test_contains/test.c @@ -8,8 +8,15 @@ int main() __CPROVER_string s2 = __CPROVER_string_literal("2b"); __CPROVER_string t = __CPROVER_string_concat(s1, s2); - assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("3"))); - assert(__CPROVER_string_contains(t,__CPROVER_string_literal("12"))); - assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("b"))); + int i = nondet_int(); + + + if(i==1) + assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("3"))); + else if(i==2) + assert(__CPROVER_string_contains(t,__CPROVER_string_literal("12"))); + else if(i==3) + assert(!__CPROVER_string_contains(t,__CPROVER_string_literal("b"))); + return 0; } diff --git a/regression/strings/test_index_of/test.c b/regression/strings/test_index_of/test.c index 40a5f281f8b..d64d3c2d66e 100644 --- a/regression/strings/test_index_of/test.c +++ b/regression/strings/test_index_of/test.c @@ -14,8 +14,7 @@ int main(){ assert(firstSlash == 3); assert(lastSlash == 7); - assert(firstSlash != 3); - assert(lastSlash != 7); + assert(firstSlash != 3 || lastSlash != 7); return 0; } diff --git a/regression/strings/test_index_of/test.desc b/regression/strings/test_index_of/test.desc index c82c0cf152e..af22cc2efb5 100644 --- a/regression/strings/test_index_of/test.desc +++ b/regression/strings/test_index_of/test.desc @@ -3,8 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -\[main.assertion.1\] assertion firstSlash == 3: SUCCESS -\[main.assertion.2\] assertion lastSlash == 7: SUCCESS -\[main.assertion.3\] assertion firstSlash != 3: FAILURE -\[main.assertion.4\] assertion lastSlash != 7: FAILURE +^\[main.assertion.1\] assertion firstSlash == 3: SUCCESS$ +^\[main.assertion.2\] assertion lastSlash == 7: SUCCESS$ +^\[main.assertion.3\] assertion firstSlash != 3 || lastSlash != 7: FAILURE$ -- \ No newline at end of file diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index fe8b75fd635..463c63d33f5 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -113,6 +113,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_concat(expr,symbol_to_string,axioms); } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); + } else if (is_string_char_set_func(id)) { + return of_string_char_set(expr,symbol_to_string,axioms); } else if (is_string_empty_string_func(id)) { return of_empty_string(expr,axioms); } else if (is_string_copy_func(id)) { @@ -339,5 +341,22 @@ void string_exprt::of_int axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); } } +} + +void string_exprt::of_string_char_set +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); //bad args to string_char_set? + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + symbol_exprt c = fresh_symbol("char", refined_string_typet::char_type()); + axioms.emplace_back(equal_exprt(c,args[2])); + with_exprt sarrnew(str.content(), args[1], c); + implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), + and_exprt(equal_exprt(content(), sarrnew), + equal_exprt(length(), str.length()))); + axioms.push_back(lemma); + } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index b1c63bb3881..364b2474a71 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -81,6 +81,7 @@ class string_exprt : public struct_exprt { void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 1878f81ae38..7ef482e06eb 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -18,7 +18,8 @@ Author: Alberto Griggio, alberto.griggio@gmail.com // This is mostly for debugging: #include #include -#include +#include + unsignedbv_typet char_type = refined_string_typet::char_type(); signedbv_typet index_type = refined_string_typet::index_type(); @@ -37,10 +38,8 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { use_counter_example = false; - witness_bound = 2; variable_with_multiple_occurence_in_index = false; - initial_loop_bound = 10; - + initial_loop_bound = 100; } void string_refinementt::display_index_set() { @@ -56,57 +55,10 @@ void string_refinementt::display_index_set() { } } -// We add instantiations before launching the solver -void string_refinementt::post_process() -{ - //debug() << "string_refinementt::post_process()" << eom; - std::vector new_axioms; - for(int i = 0; i < string_axioms.size(); i++) - if(string_axioms[i].is_simple()) - add_lemma(string_axioms[i]); - else if(string_axioms[i].is_univ_quant()) - universal_axioms.push_back(string_axioms[i]); - else { - assert(string_axioms[i].is_not_contains()); - string_axioms[i].witness = string_exprt::fresh_symbol - ("not_contains_witness", - array_typet(refined_string_typet::index_type(), - infinity_exprt(refined_string_typet::index_type()))); - not_contains_axioms.push_back(string_axioms[i]); - } - debug() << not_contains_axioms.size() << " not_contains constraints" << eom; - nb_sat_iteration = 0; - debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; +std::chrono::high_resolution_clock::time_point start_time = std::chrono::high_resolution_clock::now(); - update_index_set(universal_axioms); - update_index_set(cur); - cur.clear(); - add_instantiations(); - while(!current_index_set.empty() && initial_loop_bound-- > 0 && !variable_with_multiple_occurence_in_index) - { - current_index_set.clear(); - update_index_set(cur); - cur.clear(); - add_instantiations(); - } - - debug()<< "post_process: " << initial_loop_bound << " steps skipped" << eom; - - display_index_set(); - debug()<< "instantiating NOT_CONTAINS constraints" << eom; - for(int i=0; i lemmas; - instantiate_not_contains(not_contains_axioms[i],lemmas); - for(int j=0; j(t1-start_time).count(); + + debug() << "string_refinementt::boolbv_set_equality_to_true time in ms: " + << (duration / 1000) << eom; + if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); @@ -254,37 +212,111 @@ bvt string_refinementt::convert_function_application( return SUB::convert_function_application(expr); } -bool just_checked_axiom = false; -void string_refinementt::check_SAT() +void string_refinementt::print_time(std::string s) { + debug() << s << " TIME == " + << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; +} + +// We add instantiations before launching the solver +void string_refinementt::post_process() +{ + print_time("post_process"); + for(int i = 0; i < string_axioms.size(); i++) + if(string_axioms[i].is_simple()) + add_lemma(string_axioms[i]); + else if(string_axioms[i].is_univ_quant()) + universal_axioms.push_back(string_axioms[i]); + else { + assert(string_axioms[i].is_not_contains()); + string_axioms[i].witness = string_exprt::fresh_symbol + ("not_contains_witness", + array_typet(refined_string_typet::index_type(), + infinity_exprt(refined_string_typet::index_type()))); + not_contains_axioms.push_back(string_axioms[i]); + } + + string_axioms.clear(); + + /* + debug() << not_contains_axioms.size() << " not_contains constraints" << eom; + nb_sat_iteration = 0; + debug() << "string_refinementt::post_process at step" << step++ << " time in ms " + << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; + + debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; + update_index_set(universal_axioms); + update_index_set(cur); + cur.clear(); + add_instantiations(); + debug() << "string_refinementt::post_process at step" << step++ << " time in ms " + << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; + */ + + SUB::post_process(); +} + +decision_proceduret::resultt string_refinementt::dec_solve() { - SUB::check_SAT(); - if(!progress){ - /* if(just_checked_axiom) - { - current_index_set.clear(); - update_index_set(cur); - if(current_index_set.empty()) - debug() << "inconclusive: the model is not correct but there is nothing to add the index set" << eom; - progress=(!current_index_set.empty()); - cur.clear(); - add_instantiations(); - just_checked_axiom = false; - } - else{*/ - if(!check_axioms()) { - //just_checked_axiom = true; - //progress = true; - debug() << "check_SAT: warning, got sat but the model is not correct" << eom; - progress = false; + debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; + update_index_set(universal_axioms); + update_index_set(cur); + cur.clear(); + add_instantiations(); + + while(initial_loop_bound-- > 0) + { + print_time("string_refinementt::dec_solve"); + decision_proceduret::resultt res = SUB::dec_solve(); + + switch(res) + { + case D_SATISFIABLE: + if(!check_axioms()) { + debug() << "check_SAT: got SAT but the model is not correct" << eom; + } + else { + debug() << "check_SAT: the model is correct" << eom; + return D_SATISFIABLE; + } + + debug() << "refining.." << eom; + current_index_set.clear(); + update_index_set(cur); + cur.clear(); + add_instantiations(); + + if(variable_with_multiple_occurence_in_index) + return D_ERROR; + + if(current_index_set.empty()){ + debug() << "current index set is empty" << eom; + return D_SATISFIABLE; + } + + display_index_set(); + debug()<< "instantiating NOT_CONTAINS constraints" << eom; + for(int i=0; i lemmas; + instantiate_not_contains(not_contains_axioms[i],lemmas); + for(int j=0; j Date: Fri, 16 Sep 2016 15:32:14 +0100 Subject: [PATCH 100/221] incremental string solver --- src/solvers/refinement/string_refinement.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 7ef482e06eb..c9381695181 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -38,6 +38,7 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) { use_counter_example = false; + //use_counter_example = true; variable_with_multiple_occurence_in_index = false; initial_loop_bound = 100; } @@ -287,8 +288,11 @@ decision_proceduret::resultt string_refinementt::dec_solve() cur.clear(); add_instantiations(); - if(variable_with_multiple_occurence_in_index) - return D_ERROR; + if(variable_with_multiple_occurence_in_index) { + debug() << "WARNING: some variable appears multiple times" << eom; + return D_SATISFIABLE; + //return D_ERROR; + } if(current_index_set.empty()){ debug() << "current index set is empty" << eom; From baebf8faaaf229784df24ddda6e5860af305b4f4 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 19 Sep 2016 14:15:22 +0100 Subject: [PATCH 101/221] a couple of additional string methods, not tested yet --- src/goto-programs/pass_preprocess.cpp | 16 +- src/solvers/refinement/string_expr.cpp | 157 ++++++++++++++++++- src/solvers/refinement/string_expr.h | 7 + src/solvers/refinement/string_functions.cpp | 37 +++++ src/solvers/refinement/string_functions.h | 9 ++ src/solvers/refinement/string_refinement.cpp | 48 ++++++ src/solvers/refinement/string_refinement.h | 2 + 7 files changed, 273 insertions(+), 3 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 601abe2184d..2ec858eb005 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -173,6 +173,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal"); + } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/Object;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equals_ignore_case"); } else if(function_id == irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_startswith"); } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { @@ -184,12 +186,24 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); + } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_trim"); + } else if(function_id == irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_to_lower_case"); + } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_upper_case"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); + } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { - throw "unimplemented"; + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 463c63d33f5..bbdfa56d996 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -24,6 +24,9 @@ symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } +constant_exprt constant_of_nat(int i,int width, typet t) { + return constant_exprt(integer2binary(i,width), t); +} string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(refined_string_typet(char_type)) { @@ -113,6 +116,12 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_concat(expr,symbol_to_string,axioms); } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); + } else if (is_string_trim_func(id)) { + return of_string_trim(expr,symbol_to_string,axioms); + } else if (is_string_to_lower_case_func(id)) { + return of_string_to_lower_case(expr,symbol_to_string,axioms); + } else if (is_string_to_upper_case_func(id)) { + return of_string_to_upper_case(expr,symbol_to_string,axioms); } else if (is_string_char_set_func(id)) { return of_string_char_set(expr,symbol_to_string,axioms); } else if (is_string_empty_string_func(id)) { @@ -121,6 +130,14 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_copy(expr,symbol_to_string,axioms); } else if (is_string_of_int_func(id)) { return of_int(expr,axioms); + } else if (is_string_of_float_func(id)) { + return of_float(expr,axioms); + } else if (is_string_of_double_func(id)) { + return of_double(expr,axioms); + } else if (is_string_of_long_func(id)) { + return of_long(expr,axioms); + } else if (is_string_of_bool_func(id)) { + return of_bool(expr,axioms); } } throw "non string function"; @@ -255,10 +272,88 @@ void string_exprt::of_string_substring axioms.push_back(a.forall(idx,index_zero,length())); } -constant_exprt constant_of_nat(int i,int width, typet t) { - return constant_exprt(integer2binary(i,width), t); +void string_exprt::of_string_trim +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + symbol_exprt idx = fresh_symbol("index_trim", refined_string_typet::index_type()); + + exprt space_char = constant_of_nat(32,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + + // m + |s1| <= |str| + axioms.emplace_back(str >= plus_exprt(idx, length())); + + symbol_exprt n = fresh_symbol("QA_index_trim",refined_string_typet::index_type()); + // forall n < m, str[n] = ' ' + string_constraintt a(equal_exprt((*this)[n], space_char)); + axioms.push_back(a.forall(idx,index_zero,idx)); + + symbol_exprt n2 = fresh_symbol("QA_index_trim2",refined_string_typet::index_type()); + // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' + string_constraintt a1(equal_exprt((*this)[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); + axioms.push_back(a1.forall(n2,index_zero,minus_exprt(str.length(),plus_exprt(idx,length())))); + + symbol_exprt n3 = fresh_symbol("QA_index_trim3",refined_string_typet::index_type()); + // forall n < |s1|, s[idx+n] = s1[n] + string_constraintt a2(equal_exprt((*this)[idx], str[plus_exprt(n3, idx)])); + axioms.push_back(a2.forall(n3,index_zero,length())); + // s[m] != ' ' && s[m+|s1|-1] != ' ' + axioms.emplace_back(not_exprt(equal_exprt(str[idx],space_char))); + axioms.emplace_back(not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char))); +} + +void string_exprt::of_string_to_lower_case +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() >= 2); + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + + axioms.emplace_back(equal_exprt(length(), str.length())); + + symbol_exprt idx = fresh_symbol("QA_lower_case",refined_string_typet::index_type()); + // forall idx < str.length, this[idx] = 'A'<=str[idx]<='Z' ? str[idx]+'a'-'A' : str[idx] + exprt is_upper_case = and_exprt(binary_relation_exprt(char_A,ID_le,str[idx]), + binary_relation_exprt(str[idx],ID_le,char_Z)); + equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); + equal_exprt eq((*this)[idx], str[idx]); + string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); + axioms.push_back(a.forall(idx,index_zero,length())); +} + + +void string_exprt::of_string_to_upper_case +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() >= 2); + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + + axioms.emplace_back(equal_exprt(length(), str.length())); + + symbol_exprt idx = fresh_symbol("QA_upper_case",refined_string_typet::index_type()); + // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] + exprt is_lower_case = and_exprt(binary_relation_exprt(char_a,ID_le,str[idx]), + binary_relation_exprt(str[idx],ID_le,char_z)); + equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); + equal_exprt eq((*this)[idx], str[idx]); + string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); + axioms.push_back(a.forall(idx,index_zero,length())); } + void string_exprt::of_int (const function_application_exprt &expr,axiom_vect & axioms) { @@ -274,6 +369,64 @@ void string_exprt::of_long } +void string_exprt::of_float +(const function_application_exprt &expr,axiom_vect & axioms) +{ + // Warning this is only a partial specification + assert(expr.arguments().size() == 1); + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(11))); + + exprt char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + + + symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); + exprt c = (*this)[idx]; + exprt is_digit = + or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), + binary_relation_exprt(c,ID_le,char_9)), + equal_exprt(c,char_dot) + ); + string_constraintt a(is_digit); + axioms.push_back(a.forall(idx,index_zero,length())); + +} + +void string_exprt::of_double +(const function_application_exprt &expr,axiom_vect & axioms) +{ + // Warning this is only a partial specification + assert(expr.arguments().size() == 1); + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(20))); + + exprt char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + + symbol_exprt idx = fresh_symbol("QA_double",refined_string_typet::index_type()); + exprt c = (*this)[idx]; + + exprt is_digit = + or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), + binary_relation_exprt(c,ID_le,char_9)), + equal_exprt(c,char_dot) + ); + string_constraintt a(is_digit); + axioms.push_back(a.forall(idx,index_zero,length())); + +} + +void string_exprt::of_bool +(const function_application_exprt &expr,axiom_vect & axioms) +{ + // Warning this is only a partial specification + assert(expr.arguments().size() == 1); + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(5))); + axioms.emplace_back(binary_relation_exprt(length(), ID_ge, refined_string_typet::index_of_int(4))); +} + + void string_exprt::of_int (const exprt &i,axiom_vect & axioms,bool is_c_string, int max_size) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 364b2474a71..dd83261a3ea 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -81,11 +81,18 @@ class string_exprt : public struct_exprt { void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); void of_long(const function_application_exprt &f, axiom_vect & axioms); + // Warning the specifications of these functions is only partial: + void of_float(const function_application_exprt &f, axiom_vect & axioms); + void of_double(const function_application_exprt &f, axiom_vect & axioms); + void of_bool(const function_application_exprt &f, axiom_vect & axioms); void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index de50f977905..1007c1d6248 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -31,6 +31,15 @@ Date: September 2016 #define string_empty_string_func "__CPROVER_uninterpreted_empty_string" #define string_parse_int_func "__CPROVER_uninterpreted_parse_int" #define string_of_int_func "__CPROVER_uninterpreted_string_of_int" +#define string_of_long_func "__CPROVER_uninterpreted_string_of_long" +#define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" +#define string_of_float_func "__CPROVER_uninterpreted_string_of_float" +#define string_of_double_func "__CPROVER_uninterpreted_string_of_double" +#define string_equals_ignore_case_func "__CPROVER_uninterpreted_string_equals_ignore_case" +#define string_trim_func "__CPROVER_uninterpreted_string_trim" +#define string_to_lower_case_func "__CPROVER_uninterpreted_string_to_lower_case" +#define string_to_upper_case_func "__CPROVER_uninterpreted_string_to_upper_case" +#define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" bool starts_with(std::string s, std::string t) { @@ -100,4 +109,32 @@ bool is_string_parse_int_func(irep_idt id) { bool is_string_of_int_func(irep_idt id) { return (starts_with(id2string(id),string_of_int_func)); } +bool is_string_of_long_func(irep_idt id) { + return (starts_with(id2string(id),string_of_int_func)); +} +bool is_string_of_bool_func(irep_idt id){ + return (starts_with(id2string(id),string_of_bool_func)); +} +bool is_string_of_float_func(irep_idt id){ + return (starts_with(id2string(id),string_of_float_func)); +} +bool is_string_of_double_func(irep_idt id){ + return (starts_with(id2string(id),string_of_double_func)); +} +bool is_string_equals_ignore_case_func(irep_idt id){ + return (starts_with(id2string(id),string_equals_ignore_case_func)); +} +bool is_string_trim_func(irep_idt id){ + return (starts_with(id2string(id),string_trim_func)); +} +bool is_string_to_lower_case_func(irep_idt id){ + return (starts_with(id2string(id),string_to_lower_case_func)); +} +bool is_string_to_upper_case_func(irep_idt id){ + return (starts_with(id2string(id),string_to_upper_case_func)); +} +bool is_string_is_empty_func(irep_idt id){ + return (starts_with(id2string(id),string_is_empty_func)); +} + diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 6d3b562bd49..d7efdf7c924 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -37,5 +37,14 @@ bool is_string_copy_func(irep_idt id); bool is_string_empty_string_func(irep_idt id); bool is_string_parse_int_func(irep_idt id); bool is_string_of_int_func(irep_idt id); +bool is_string_of_long_func(irep_idt id); +bool is_string_of_bool_func(irep_idt id); +bool is_string_of_float_func(irep_idt id); +bool is_string_of_double_func(irep_idt id); +bool is_string_equals_ignore_case_func(irep_idt id); +bool is_string_trim_func(irep_idt id); +bool is_string_to_lower_case_func(irep_idt id); +bool is_string_to_upper_case_func(irep_idt id); +bool is_string_is_empty_func(irep_idt id); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index c9381695181..3db96929bec 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -189,6 +189,10 @@ bvt string_refinementt::convert_function_application( return convert_string_length(expr); } else if (is_string_equal_func(id)) { return convert_bv(convert_string_equal(expr)); + } else if (is_string_equals_ignore_case_func(id)) { + return convert_bv(convert_string_equals_ignore_case(expr)); + } else if (is_string_is_empty_func(id)) { + return convert_bv(convert_string_is_empty(expr)); } else if (is_string_char_at_func(id)) { return convert_string_char_at(expr); } else if (is_string_is_prefix_func(id)) { @@ -412,6 +416,36 @@ exprt string_refinementt::convert_string_equal(const function_application_exprt return tc_eq; } +exprt string_refinementt::convert_string_equals_ignore_case(const function_application_exprt &f) { + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt eq = fresh_boolean("equal"); + typecast_exprt tc_eq(eq,f.type()); + + debug() << "WARNING: implementation of convert_string_equals_ignore_case is incomplete" << eom; + assert(false); + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string equal? + + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); + symbol_exprt witness = fresh_index("witness_unequal"); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); + + string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); + + string_axioms.push_back + (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) + ).forall(qvar,zero,s1.length())); + + string_axioms.emplace_back + (not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); + + return tc_eq; +} + bvt string_refinementt::convert_string_length( const function_application_exprt &f) @@ -461,6 +495,20 @@ bvt string_refinementt::convert_string_is_prefix return convert_bv(tc_isprefix); } +exprt string_refinementt::convert_string_is_empty +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt is_empty = fresh_boolean("is_empty"); + string_exprt s0 = make_string(args[0]); + string_axioms.emplace_back(implies_exprt(is_empty, equal_exprt(s0.length(),zero))); + string_axioms.emplace_back(implies_exprt(equal_exprt(s0.length(),zero),is_empty)); + return typecast_exprt(is_empty,f.type()); + +} bvt string_refinementt::convert_string_is_suffix (const function_application_exprt &f, bool swap_arguments) diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 7b9c310f049..22d441d80b6 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -56,6 +56,8 @@ class string_refinementt: public bv_refinementt // The following functions convert different string functions // and add the corresponding lemmas to a list of properties to be checked exprt convert_string_equal(const function_application_exprt &f); + exprt convert_string_equals_ignore_case(const function_application_exprt &f); + exprt convert_string_is_empty(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); bvt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); From 0ff5946a1f3aa40264f5a89eaccd49d86d879420 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 20 Sep 2016 13:39:12 +0100 Subject: [PATCH 102/221] corrected string builders --- src/cbmc/cbmc_parse_options.cpp | 3 + src/goto-programs/pass_preprocess.cpp | 29 +++++--- src/solvers/refinement/string_expr.cpp | 94 ++++++++++++++++++++------ 3 files changed, 98 insertions(+), 28 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index ea00345900e..89e66beb450 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -908,6 +908,9 @@ bool cbmc_parse_optionst::process_goto_program( // do partial inlining status() << "Partial Inlining" << eom; goto_partial_inline(goto_functions, ns, ui_message_handler); + + + show_goto_functions(ns, get_ui(), goto_functions); if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 2ec858eb005..d51bc4f972e 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -98,8 +98,10 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g goto_functions.function_map[irep_idt(function_name)]; } -void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt & goto_program, - goto_programt::instructionst::iterator & i_it, irep_idt function_name){ +void make_string_function_side_effect +(symbol_tablet & symbol_table, goto_functionst & goto_functions, + goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name, std::map & string_builders){ // replace "s.append(x)" by "s=__CPROVER_uninterpreted_strcat(s,x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -119,16 +121,20 @@ void make_string_function_side_effect(symbol_tablet & symbol_table, goto_functio rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); //code_assignt assignment(dereference_exprt(function_call.arguments()[0]), rhs); code_assignt assignment(function_call.arguments()[0], rhs); - code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); + //code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); + // add a mapping from the left hand side to the first argument + string_builders[function_call.lhs()]=function_call.arguments()[0]; assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); i_it->code=assignment; // make sure it is in the function map goto_functions.function_map[irep_idt(function_name)]; - i_it = goto_program.insert_after(i_it); - i_it->make_assignment(); - i_it->code=assignment2; + //i_it = goto_program.insert_after(i_it); + //i_it->make_assignment(); + //i_it->code=assignment2; + // add a mapping from the left hand side to the first argument + //string_builders[function_call.lhs()]=function_call.arguments()[0]; } @@ -149,10 +155,17 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; + // map several names of a string builder to a unique one + std::map string_builders; Forall_goto_program_instructions(i_it, goto_program) { if(i_it->is_function_call()) { + code_function_callt &function_call=to_code_function_call(i_it->code); + for(int i = 0; i < function_call.arguments().size(); i++) + if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) + function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; + if(function_call.function().id()==ID_symbol){ const irep_idt function_id= to_symbol_expr(function_call.function()).get_identifier(); @@ -189,7 +202,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_trim"); } else if(function_id == irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_to_lower_case"); + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_lower_case"); } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_upper_case"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { @@ -197,7 +210,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat"); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index bbdfa56d996..a51e06997f2 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -138,9 +138,13 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_long(expr,axioms); } else if (is_string_of_bool_func(id)) { return of_bool(expr,axioms); - } + } else { + std::string msg("string_exprt::of_function_application: unknown symbol :"); + msg+=id.c_str(); + throw msg; + } } - throw "non string function"; + throw "string_exprt::of_function_application: not a string function"; } irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ @@ -280,7 +284,12 @@ void string_exprt::of_string_trim string_exprt str = of_expr(args[0],symbol_to_string,axioms); symbol_exprt idx = fresh_symbol("index_trim", refined_string_typet::index_type()); - exprt space_char = constant_of_nat(32,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt space_char; + if(is_c_string) + space_char = constant_of_nat(32,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + else + space_char = constant_of_nat(32,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); // m + |s1| <= |str| axioms.emplace_back(str >= plus_exprt(idx, length())); @@ -308,13 +317,25 @@ void string_exprt::of_string_to_lower_case (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() >= 2); + assert(args.size() == 1); string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt char_a; + exprt char_A; + exprt char_z; + exprt char_Z; + if(is_c_string) { + char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + } else { + char_a = constant_of_nat(97,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_A = constant_of_nat(65,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_z = constant_of_nat(122,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_Z = constant_of_nat(90,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + } axioms.emplace_back(equal_exprt(length(), str.length())); @@ -333,13 +354,26 @@ void string_exprt::of_string_to_upper_case (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() >= 2); + assert(args.size() == 1); string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt char_a; + exprt char_A; + exprt char_z; + exprt char_Z; + + if(is_c_string) { + char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + } else { + char_a = constant_of_nat(97,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_A = constant_of_nat(65,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_z = constant_of_nat(122,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_Z = constant_of_nat(90,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + } axioms.emplace_back(equal_exprt(length(), str.length())); @@ -376,10 +410,19 @@ void string_exprt::of_float assert(expr.arguments().size() == 1); axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(11))); - exprt char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt char_0; + exprt char_9; + exprt char_dot; + if(is_c_string) { + char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + } else { + char_0 = constant_of_nat(48,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_9 = constant_of_nat(57,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_dot = constant_of_nat(46,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + } symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); exprt c = (*this)[idx]; @@ -400,9 +443,20 @@ void string_exprt::of_double assert(expr.arguments().size() == 1); axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(20))); - exprt char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - exprt char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + exprt char_0; + exprt char_9; + exprt char_dot; + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + + if(is_c_string) { + char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + } else { + char_0 = constant_of_nat(48,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_9 = constant_of_nat(57,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_dot = constant_of_nat(46,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + } symbol_exprt idx = fresh_symbol("QA_double",refined_string_typet::index_type()); exprt c = (*this)[idx]; From 124965729ae6a203899c57012c523e2fc4b7a884 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 20 Sep 2016 14:16:20 +0100 Subject: [PATCH 103/221] corrected trim function and test --- regression/strings/java_trim/test.desc | 8 ++++++++ regression/strings/java_trim/test_trim.class | Bin 0 -> 730 bytes regression/strings/java_trim/test_trim.java | 8 ++++++++ src/solvers/refinement/string_expr.cpp | 12 ++++++++---- 4 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 regression/strings/java_trim/test.desc create mode 100644 regression/strings/java_trim/test_trim.class create mode 100644 regression/strings/java_trim/test_trim.java diff --git a/regression/strings/java_trim/test.desc b/regression/strings/java_trim/test.desc new file mode 100644 index 00000000000..fa0e10a1ca7 --- /dev/null +++ b/regression/strings/java_trim/test.desc @@ -0,0 +1,8 @@ +CORE +test_trim.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_trim.java line 5: SUCCESS$ +^\[assertion.2\] assertion at file test_trim.java line 6: FAILURE$ +-- diff --git a/regression/strings/java_trim/test_trim.class b/regression/strings/java_trim/test_trim.class new file mode 100644 index 0000000000000000000000000000000000000000..8e6a923dcbc867d6e06db7e6b4ad880270c3084d GIT binary patch literal 730 zcmZWn%Wl&^6g}fd#&Mk{Bxwkb5*JGA^pyny7OfDdz$z_^ASB8Hjh#{D)^Vuq@G<#; zt^p~PK!QF01mccM5-MbC=FWYbd(WBq`TOg401wcy;ozo)TQ+WExdGLoZekA)0?1-VT7sg@sghBV(Zy1dIVP7(oyJ0L3 zM+09buT?Sy1|p0Z8s59^iTEfwk%*5wy(|gi<6Tu)>SZE0JrE!Ae2#SnYcGiYg4?~} zC<)}tP(dwbGR@vo>0n1eIVhvTP;_14`flJ7iFF4a+73!sWH58LgAHslH0RBqO&PsN zl3_v<3O{fOXNJzP= plus_exprt(idx, length())); + axioms.emplace_back(binary_relation_exprt(idx, ID_ge, index_zero)); + axioms.emplace_back(str >= idx); + axioms.emplace_back(str >= length()); + ///axioms.emplace_back(binary_relation_exprt(length(), ID_gt, index_zero)); symbol_exprt n = fresh_symbol("QA_index_trim",refined_string_typet::index_type()); // forall n < m, str[n] = ' ' - string_constraintt a(equal_exprt((*this)[n], space_char)); - axioms.push_back(a.forall(idx,index_zero,idx)); + string_constraintt a(equal_exprt(str[n], space_char)); + axioms.push_back(a.forall(n,index_zero,idx)); symbol_exprt n2 = fresh_symbol("QA_index_trim2",refined_string_typet::index_type()); // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' - string_constraintt a1(equal_exprt((*this)[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); axioms.push_back(a1.forall(n2,index_zero,minus_exprt(str.length(),plus_exprt(idx,length())))); symbol_exprt n3 = fresh_symbol("QA_index_trim3",refined_string_typet::index_type()); // forall n < |s1|, s[idx+n] = s1[n] - string_constraintt a2(equal_exprt((*this)[idx], str[plus_exprt(n3, idx)])); + string_constraintt a2(equal_exprt((*this)[n3], str[plus_exprt(n3, idx)])); axioms.push_back(a2.forall(n3,index_zero,length())); // s[m] != ' ' && s[m+|s1|-1] != ' ' axioms.emplace_back(not_exprt(equal_exprt(str[idx],space_char))); From 4066ea23db1e9787aad2be4eedd831fa5b16852c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 20 Sep 2016 14:50:33 +0100 Subject: [PATCH 104/221] corrected case functions and test --- regression/strings/java_case/test.desc | 11 ++++++ regression/strings/java_case/test_case.class | Bin 0 -> 1073 bytes regression/strings/java_case/test_case.java | 16 +++++++++ src/goto-programs/pass_preprocess.cpp | 4 +-- src/solvers/refinement/string_functions.cpp | 2 +- src/solvers/refinement/string_refinement.cpp | 36 +++++++++++++++---- 6 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 regression/strings/java_case/test.desc create mode 100644 regression/strings/java_case/test_case.class create mode 100644 regression/strings/java_case/test_case.java diff --git a/regression/strings/java_case/test.desc b/regression/strings/java_case/test.desc new file mode 100644 index 00000000000..0df73788e97 --- /dev/null +++ b/regression/strings/java_case/test.desc @@ -0,0 +1,11 @@ +CORE +test_case.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_case.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_case.java line 12: SUCCESS$ +^\[assertion.3\] assertion at file test_case.java line 13: SUCCESS$ +^\[assertion.4\] assertion at file test_case.java line 14: FAILURE$ +-- + diff --git a/regression/strings/java_case/test_case.class b/regression/strings/java_case/test_case.class new file mode 100644 index 0000000000000000000000000000000000000000..8579881de17ec58f4ebd0d9ac2375d1e7d0ca94e GIT binary patch literal 1073 zcmZuw>rN9v6#k~S-EOzEw58w$5kzgd)f);Hk+Oxvq##Mv1pHyP+ex$7cI)m|;}hsB zzzg_WOiCh&{`VDp7vh;+p@JlvnKNg;^UZfI`|J4o4*>VEt{{zZ2@^7ICUj4CzVTak%Z8R@*6?j$Ui> zIs@Bbh%A|H(_Ll==JKx?LYh_Q42g=_=9}GCjoU8-m@Znn*=ES*URQSY_j;kJw;P43 zYn$yxQ3S@Tu5P^D&^sQUv@^&{M)NPZQnk9a!PiYeHQ;i`ePiejpA%FnvKVGao~I>k zrJAAD*9739ibq(Gu&ClOiV~JoJQ2=iEU3s}h`@TyFzQ^zQ>-wI^w~-$nXlQlWee6- zO)IZ?hGCQ`qJ&k3=&33Rnu;)9q_4b~ zr)DR8z_Ui%vbnGH!h8st=oe6H((q90>)bJIUO%lTb=>XJ1x?Nl#%UbWG`%c2BKkpA z5EO%9T1V(KN;{)HJaq{6RRD2`)`;h%>f;pvik(o&;J;e4AJA%4>i1<(6J)0W1$UU7(^pHG{9`#A~knzLz`fNgN zz*9Q~h3qh`5hNf{dQnoXU;;5L(*L)GI2sthC%U~#$U%gTu_$5G|FYRJ$hdY|lX)+B jAeF{o52<}fp)UvpzaiRx@}xk5E{s5YMU-*OQ*`|gWS!(_ literal 0 HcmV?d00001 diff --git a/regression/strings/java_case/test_case.java b/regression/strings/java_case/test_case.java new file mode 100644 index 00000000000..ce3a51814c8 --- /dev/null +++ b/regression/strings/java_case/test_case.java @@ -0,0 +1,16 @@ +public class test_case { + + public static void main(String[] argv) { + + String s = new String("AbcCdE"); + String l = s.toLowerCase(); + System.out.println(l); + + String u = s.toUpperCase(); + System.out.println(u); + assert(l.equals("abccde")); + assert(u.equals("ABCCDE")); + assert(s.equalsIgnoreCase("ABccDe")); + assert(!l.equals("abccde") || !u.equals("ABCCDE")); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index d51bc4f972e..3254d301465 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -185,8 +185,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal"); - } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/Object;)Z")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal_func"); + } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equals_ignore_case"); } else if(function_id == irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_startswith"); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 1007c1d6248..5165e9488c4 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -13,7 +13,7 @@ Date: September 2016 #define char_literal_func "__CPROVER_uninterpreted_char_literal" #define string_length_func "__CPROVER_uninterpreted_strlen" #define string_set_length_func "__CPROVER_uninterpreted_set_length" -#define string_equal_func "__CPROVER_uninterpreted_string_equal" +#define string_equal_func "__CPROVER_uninterpreted_string_equal_func" #define string_char_at_func "__CPROVER_uninterpreted_char_at" #define string_concat_func "__CPROVER_uninterpreted_strcat" #define string_concat_int_func "__CPROVER_uninterpreted_strcat_int" diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 3db96929bec..33a7848df7c 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -416,32 +416,54 @@ exprt string_refinementt::convert_string_equal(const function_application_exprt return tc_eq; } +exprt character_equals_ignore_case(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) { + exprt is_upper_case_1 = and_exprt(binary_relation_exprt(char_A,ID_le,char1), + binary_relation_exprt(char1,ID_le,char_Z)); + exprt is_upper_case_2 = and_exprt(binary_relation_exprt(char_A,ID_le,char2), + binary_relation_exprt(char2,ID_le,char_Z)); + return or_exprt(or_exprt(equal_exprt(char1,char2), + and_exprt(is_upper_case_1, equal_exprt(minus_exprt(plus_exprt(char_a,char1),char_A),char2))), + and_exprt(is_upper_case_2, equal_exprt(minus_exprt(plus_exprt(char_a,char2),char_A),char1))); +} + exprt string_refinementt::convert_string_equals_ignore_case(const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt eq = fresh_boolean("equal"); + symbol_exprt eq = fresh_boolean("equal_ignore_case"); typecast_exprt tc_eq(eq,f.type()); - debug() << "WARNING: implementation of convert_string_equals_ignore_case is incomplete" << eom; - assert(false); const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //bad args to string equal? + bool is_c_string = refined_string_typet::is_c_string_type(f.type()); + exprt char_a; + exprt char_A; + exprt char_Z; + if(is_c_string) { + char_a = constant_of_nat(97,refined_string_typet::char_type()); + char_A = constant_of_nat(65,refined_string_typet::char_type()); + char_Z = constant_of_nat(90,refined_string_typet::char_type()); + } else { + char_a = constant_of_nat(97,refined_string_typet::java_char_type()); + char_A = constant_of_nat(65,refined_string_typet::java_char_type()); + char_Z = constant_of_nat(90,refined_string_typet::java_char_type()); + } + string_exprt s1 = make_string(args[0]); string_exprt s2 = make_string(args[1]); - symbol_exprt witness = fresh_index("witness_unequal"); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); + symbol_exprt witness = fresh_index("witness_unequal_ignore_case"); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_ignore_case", index_type); string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); string_axioms.push_back - (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) + (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) ).forall(qvar,zero,s1.length())); string_axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); + string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,zero,s1.length()))); return tc_eq; } From 7e49aa1bc8eab3d615491be8608af1121e195da0 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 22 Sep 2016 11:59:18 +0100 Subject: [PATCH 105/221] corrected case functions and test --- regression/strings/cprover-string-hack.h | 4 ++-- regression/strings/java_case/test.desc | 3 +-- regression/strings/test_char_set/test.c | 2 +- regression/strings/test_char_set/test.desc | 4 ++-- regression/strings/test_equal/test.desc | 4 ++-- regression/strings/test_pass1/test.desc | 4 ++-- regression/strings/test_substring/test.desc | 8 ++++---- 7 files changed, 14 insertions(+), 15 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index eca10720bfa..05d4b85f71d 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -9,7 +9,7 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at(s, p) /* string equality */ -#define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal(s1, s2) +#define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal_func(s1, s2) /* defines a string literal, e.g. __CPROVER_string_literal("foo") */ #define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal(s) @@ -55,7 +55,7 @@ typedef unsigned char __CPROVER_char; * don't use these directly ******************************************************************************/ extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, int pos); -extern __CPROVER_bool __CPROVER_uninterpreted_string_equal(__CPROVER_string str1, __CPROVER_string str2); +extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); diff --git a/regression/strings/java_case/test.desc b/regression/strings/java_case/test.desc index 0df73788e97..7397314cca8 100644 --- a/regression/strings/java_case/test.desc +++ b/regression/strings/java_case/test.desc @@ -7,5 +7,4 @@ test_case.class ^\[assertion.2\] assertion at file test_case.java line 12: SUCCESS$ ^\[assertion.3\] assertion at file test_case.java line 13: SUCCESS$ ^\[assertion.4\] assertion at file test_case.java line 14: FAILURE$ --- - +-- \ No newline at end of file diff --git a/regression/strings/test_char_set/test.c b/regression/strings/test_char_set/test.c index 973db5b06e5..61aaf9b768e 100644 --- a/regression/strings/test_char_set/test.c +++ b/regression/strings/test_char_set/test.c @@ -5,7 +5,7 @@ int main() { __CPROVER_string s = __CPROVER_string_literal("abc");; - __CPROVER_char c = __CPROVER_char_literal("p"); + char c = 'p'; __CPROVER_string t = __CPROVER_char_set(s,1,c);; assert(__CPROVER_string_equal(t, __CPROVER_string_literal("apc"))); diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc index f0d3cc6ca97..3a68d88966e 100644 --- a/regression/strings/test_char_set/test.desc +++ b/regression/strings/test_char_set/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal("apc")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal("abc")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal("apc")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal("abc")): FAILURE$ -- diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index 514b9cd2e3b..ecf379dbaa7 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(s, __CPROVER_uninterpreted_string_literal(\"pippo\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(s, __CPROVER_uninterpreted_string_literal(\"mippo\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal(\"pippo\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal(\"mippo\")): FAILURE$ -- diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 3aaf19479ea..5c88e72314d 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"a\")): SUCCESS -^\[main.assertion.2\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"a\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"a\")): SUCCESS +^\[main.assertion.2\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"a\")): FAILURE$ ^\*\* 1 of 2 failed (2 iterations)$ diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc index 03aa24a235e..cc7ff5f5841 100644 --- a/regression/strings/test_substring/test.desc +++ b/regression/strings/test_substring/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cd\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cc\")): FAILURE$ -^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"bc\")): SUCCESS$ -^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal(t, __CPROVER_uninterpreted_string_literal(\"cd\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cd\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cc\")): FAILURE$ +^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"bc\")): SUCCESS$ +^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cd\")): FAILURE$ -- \ No newline at end of file From a7e6c4c475fd850450478059e1c1043a727bc283 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 3 Oct 2016 09:36:19 +0100 Subject: [PATCH 106/221] changed the name of the CPROVER strcat functions to avoid confusion between its different versions --- regression/strings/cprover-string-hack.h | 4 +- src/cbmc/cbmc_parse_options.cpp | 2 - src/goto-programs/pass_preprocess.cpp | 12 +- src/solvers/refinement/string_expr.cpp | 161 ++++++++++++++------ src/solvers/refinement/string_expr.h | 13 +- src/solvers/refinement/string_functions.cpp | 24 ++- src/solvers/refinement/string_functions.h | 5 + 7 files changed, 166 insertions(+), 55 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 05d4b85f71d..a3eda1cb151 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -20,7 +20,7 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal(c) /* produces the concatenation of s1 and s2 */ -#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_strcat(s1, s2) +#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_strcat_func(s1, s2) /* return the length of s */ #define __CPROVER_string_length(s) __CPROVER_uninterpreted_strlen(s) @@ -58,7 +58,7 @@ extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, int extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); -extern __CPROVER_string __CPROVER_uninterpreted_strcat(__CPROVER_string str1, __CPROVER_string str2); +extern __CPROVER_string __CPROVER_uninterpreted_strcat_func(__CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_strlen(__CPROVER_string str); extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, int i, int j); extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 89e66beb450..fb0cbeee2e2 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -910,8 +910,6 @@ bool cbmc_parse_optionst::process_goto_program( goto_partial_inline(goto_functions, ns, ui_message_handler); - show_goto_functions(ns, get_ui(), goto_functions); - if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; pass_preprocess(symbol_table, goto_functions); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 3254d301465..e6e8255bf5e 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -179,7 +179,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.lastIndexOf:(I)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlastindexof"); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat"); + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat_func"); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { @@ -210,13 +210,21 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_long_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_bool_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_char_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_double_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_float_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 4280d0f1c51..2aaf5155f33 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -114,6 +114,18 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_literal(expr,axioms); } else if (is_string_concat_func(id)) { return of_string_concat(expr,symbol_to_string,axioms); + } else if (is_string_concat_int_func(id)) { + return of_string_concat_int(expr,symbol_to_string,axioms); + } else if (is_string_concat_long_func(id)) { + return of_string_concat_long(expr,symbol_to_string,axioms); + } else if (is_string_concat_bool_func(id)) { + return of_string_concat_bool(expr,symbol_to_string,axioms); + } else if (is_string_concat_char_func(id)) { + return of_string_concat_char(expr,symbol_to_string,axioms); + } else if (is_string_concat_double_func(id)) { + return of_string_concat_double(expr,symbol_to_string,axioms); + } else if (is_string_concat_float_func(id)) { + return of_string_concat_float(expr,symbol_to_string,axioms); } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); } else if (is_string_trim_func(id)) { @@ -212,14 +224,7 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ } -void string_exprt::of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string concat - - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); - +void string_exprt::of_string_concat(string_exprt s1, string_exprt s2, std::map & symbol_to_string, axiom_vect & axioms) { equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); @@ -233,9 +238,21 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); axioms.push_back(a2.forall(idx2, index_zero, s2.length())); +} + +void string_exprt::of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string concat + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); + + of_string_concat(s1, s2, symbol_to_string, axioms); } + + void string_exprt::of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); @@ -312,9 +329,12 @@ void string_exprt::of_string_trim // forall n < |s1|, s[idx+n] = s1[n] string_constraintt a2(equal_exprt((*this)[n3], str[plus_exprt(n3, idx)])); axioms.push_back(a2.forall(n3,index_zero,length())); - // s[m] != ' ' && s[m+|s1|-1] != ' ' - axioms.emplace_back(not_exprt(equal_exprt(str[idx],space_char))); - axioms.emplace_back(not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char))); + // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| + or_exprt m_index_condition(equal_exprt(idx,str.length()), + and_exprt + (not_exprt(equal_exprt(str[idx],space_char)), + not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char)))); + axioms.push_back(m_index_condition); } void string_exprt::of_string_to_lower_case @@ -408,13 +428,18 @@ void string_exprt::of_long void string_exprt::of_float -(const function_application_exprt &expr,axiom_vect & axioms) +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),11); +} + +void string_exprt::of_float +(const exprt &f,axiom_vect & axioms, bool is_c_string, int max_size) { // Warning this is only a partial specification - assert(expr.arguments().size() == 1); - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(11))); + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(max_size))); - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); exprt char_0; exprt char_9; exprt char_dot; @@ -437,49 +462,28 @@ void string_exprt::of_float ); string_constraintt a(is_digit); axioms.push_back(a.forall(idx,index_zero,length())); - } void string_exprt::of_double -(const function_application_exprt &expr,axiom_vect & axioms) +(const function_application_exprt &f,axiom_vect & axioms) { - // Warning this is only a partial specification - assert(expr.arguments().size() == 1); - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(20))); - - exprt char_0; - exprt char_9; - exprt char_dot; - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - - if(is_c_string) { - char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - } else { - char_0 = constant_of_nat(48,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_9 = constant_of_nat(57,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_dot = constant_of_nat(46,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - } + assert(f.arguments().size() == 1); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),20); +} - symbol_exprt idx = fresh_symbol("QA_double",refined_string_typet::index_type()); - exprt c = (*this)[idx]; - exprt is_digit = - or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), - binary_relation_exprt(c,ID_le,char_9)), - equal_exprt(c,char_dot) - ); - string_constraintt a(is_digit); - axioms.push_back(a.forall(idx,index_zero,length())); +void string_exprt::of_bool +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_bool(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); } void string_exprt::of_bool -(const function_application_exprt &expr,axiom_vect & axioms) +(const exprt &i,axiom_vect & axioms,bool is_c_string) { // Warning this is only a partial specification - assert(expr.arguments().size() == 1); axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(5))); axioms.emplace_back(binary_relation_exprt(length(), ID_ge, refined_string_typet::index_of_int(4))); } @@ -554,6 +558,15 @@ void string_exprt::of_int } } +void string_exprt::of_char +(const exprt &c, axiom_vect & axioms, bool is_c_string) +{ + and_exprt lemma(equal_exprt((*this)[refined_string_typet::index_of_int(0)], c), + equal_exprt(length(), refined_string_typet::index_of_int(1))); + axioms.push_back(lemma); + +} + void string_exprt::of_string_char_set (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { @@ -571,3 +584,59 @@ void string_exprt::of_string_char_set axioms.push_back(lemma); } + + +void string_exprt::of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + +void string_exprt::of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + +void string_exprt::of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + +void string_exprt::of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + +void string_exprt::of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + +void string_exprt::of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2; + s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index dd83261a3ea..72a73677ca0 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -79,7 +79,14 @@ class string_exprt : public struct_exprt { // Auxiliary functions for of_expr void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); + void of_string_concat(string_exprt s1, string_exprt s2, std::map & symbol_to_string, axiom_vect & axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); @@ -88,12 +95,16 @@ class string_exprt : public struct_exprt { void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); + void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); void of_long(const function_application_exprt &f, axiom_vect & axioms); + void of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); // Warning the specifications of these functions is only partial: void of_float(const function_application_exprt &f, axiom_vect & axioms); + void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, int max_size); void of_double(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const function_application_exprt &f, axiom_vect & axioms); - void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); + void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); + void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 5165e9488c4..58a1ce4d3be 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -15,8 +15,13 @@ Date: September 2016 #define string_set_length_func "__CPROVER_uninterpreted_set_length" #define string_equal_func "__CPROVER_uninterpreted_string_equal_func" #define string_char_at_func "__CPROVER_uninterpreted_char_at" -#define string_concat_func "__CPROVER_uninterpreted_strcat" -#define string_concat_int_func "__CPROVER_uninterpreted_strcat_int" +#define string_concat_func "__CPROVER_uninterpreted_strcat_func" +#define string_concat_int_func "__CPROVER_uninterpreted_strcat_int_func" +#define string_concat_long_func "__CPROVER_uninterpreted_strcat_long_func" +#define string_concat_char_func "__CPROVER_uninterpreted_strcat_char_func" +#define string_concat_bool_func "__CPROVER_uninterpreted_strcat_bool_func" +#define string_concat_float_func "__CPROVER_uninterpreted_strcat_float_func" +#define string_concat_double_func "__CPROVER_uninterpreted_strcat_double_func" #define string_substring_func "__CPROVER_uninterpreted_substring" #define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" #define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" @@ -70,6 +75,21 @@ bool is_string_concat_func(irep_idt id) { bool is_string_concat_int_func(irep_idt id) { return (starts_with(id2string(id),string_concat_int_func)); } +bool is_string_concat_long_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_long_func)); +} +bool is_string_concat_char_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_char_func)); +} +bool is_string_concat_bool_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_bool_func)); +} +bool is_string_concat_float_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_float_func)); +} +bool is_string_concat_double_func(irep_idt id) { + return (starts_with(id2string(id),string_concat_double_func)); +} bool is_string_substring_func(irep_idt id) { return (starts_with(id2string(id),string_substring_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index d7efdf7c924..19e3e418f86 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -24,6 +24,11 @@ bool is_string_equal_func(irep_idt id); bool is_string_char_at_func(irep_idt id); bool is_string_concat_func(irep_idt id); bool is_string_concat_int_func(irep_idt id); +bool is_string_concat_long_func(irep_idt id); +bool is_string_concat_char_func(irep_idt id); +bool is_string_concat_bool_func(irep_idt id); +bool is_string_concat_double_func(irep_idt id); +bool is_string_concat_float_func(irep_idt id); bool is_string_substring_func(irep_idt id); bool is_string_is_prefix_func(irep_idt id); bool is_string_is_suffix_func(irep_idt id); From 9a0f4af591cd6f6287cb93e7f579575cbca64252 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 3 Oct 2016 10:47:28 +0100 Subject: [PATCH 107/221] corrected append int and test for empty string --- regression/strings/java_empty/test.desc | 8 ++++++++ regression/strings/java_empty/test_empty.class | Bin 0 -> 669 bytes regression/strings/java_empty/test_empty.java | 7 +++++++ src/solvers/refinement/refined_string_type.h | 5 +++++ src/solvers/refinement/string_expr.cpp | 17 +++++++++-------- 5 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 regression/strings/java_empty/test.desc create mode 100644 regression/strings/java_empty/test_empty.class create mode 100644 regression/strings/java_empty/test_empty.java diff --git a/regression/strings/java_empty/test.desc b/regression/strings/java_empty/test.desc new file mode 100644 index 00000000000..56b21e2041c --- /dev/null +++ b/regression/strings/java_empty/test.desc @@ -0,0 +1,8 @@ +CORE +test_empty.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_empty.java line 4: SUCCESS$ +^\[assertion.2\] assertion at file test_empty.java line 5: FAILURE$ +-- diff --git a/regression/strings/java_empty/test_empty.class b/regression/strings/java_empty/test_empty.class new file mode 100644 index 0000000000000000000000000000000000000000..f0ced290ee36f38aa83f6b0d1a25161f3594a364 GIT binary patch literal 669 zcmZXSL2uJQ5QV>uoj7rwCOBycltKyxk|I$M;zWf&rJMpBQXv5cJyRbFM;}^Db*#Fk#){qDzUE z!zGtC8xEHhjm;oQbex9MD0vhn!CcRJFFS}%cV;&>V>++4|_ zUTl!1y0XYeIA)DZ<)aN95R zK4Q&Txv{`rP@J>$h0=>-oNpQK3;s7~WDA+Bk1e?+%a*rM Date: Mon, 3 Oct 2016 11:33:37 +0100 Subject: [PATCH 108/221] made the string of bool conversion precise --- src/solvers/refinement/string_expr.cpp | 36 +++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index a1c4723394e..9b4747c0709 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -483,9 +483,39 @@ void string_exprt::of_bool void string_exprt::of_bool (const exprt &i,axiom_vect & axioms,bool is_c_string) { - // Warning this is only a partial specification - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(5))); - axioms.emplace_back(binary_relation_exprt(length(), ID_ge, refined_string_typet::index_of_int(4))); + unsignedbv_typet char_type; + int char_width; + if(is_c_string) { + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + } + + assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); + + typecast_exprt eq(i,bool_typet()); + + string_exprt true_string(char_type); + string_exprt false_string(char_type); + true_string.of_string_constant("true",char_width,char_type,axioms); + false_string.of_string_constant("false",char_width,char_type,axioms); + + axioms.emplace_back(eq, equal_exprt(length(),true_string.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_true", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(eq,equal_exprt((*this)[qvar],true_string[qvar]) + ).forall(qvar,index_zero,true_string.length())); + + axioms.emplace_back(not_exprt(eq), equal_exprt(length(),false_string.length())); + symbol_exprt qvar1 = string_exprt::fresh_symbol("qvar_equal_false", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(not_exprt(eq),equal_exprt((*this)[qvar1],false_string[qvar1]) + ).forall(qvar,index_zero,false_string.length())); + + + } From aff92df15b0203f424b30d95f149f8efdfed923a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 3 Oct 2016 16:51:06 +0100 Subject: [PATCH 109/221] added the set length method for string builders --- src/goto-programs/pass_preprocess.cpp | 7 ++- src/solvers/refinement/string_expr.cpp | 53 ++++++++++++++++++++ src/solvers/refinement/string_expr.h | 3 ++ src/solvers/refinement/string_functions.cpp | 9 +++- src/solvers/refinement/string_functions.h | 2 + src/solvers/refinement/string_refinement.cpp | 3 +- 6 files changed, 73 insertions(+), 4 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index e6e8255bf5e..ea9df12e7bf 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -213,8 +213,6 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_long_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { @@ -239,6 +237,11 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_of_int"); } else if(function_id == irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_parse_int"); + } else if(function_id == irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_value_of"); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.setLength:(I)V")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_string_set_length",string_builders); + } } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 9b4747c0709..c5c85cbd4b1 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -136,6 +136,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_to_upper_case(expr,symbol_to_string,axioms); } else if (is_string_char_set_func(id)) { return of_string_char_set(expr,symbol_to_string,axioms); + } else if (is_string_value_of_func(id)) { + return of_string_value_of(expr,symbol_to_string,axioms); } else if (is_string_empty_string_func(id)) { return of_empty_string(expr,axioms); } else if (is_string_copy_func(id)) { @@ -150,6 +152,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_long(expr,axioms); } else if (is_string_of_bool_func(id)) { return of_bool(expr,axioms); + } else if (is_string_set_length_func(id)) { + return of_string_set_length(expr,symbol_to_string,axioms); } else { std::string msg("string_exprt::of_function_application: unknown symbol :"); msg+=id.c_str(); @@ -265,6 +269,55 @@ void string_exprt::of_string_copy(const function_application_exprt &f, std::map< axioms.push_back(a1.forall(idx, index_zero, s1.length())); } +void string_exprt::of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + + bool is_c_string = refined_string_typet::is_c_string_type(f.type()); + exprt null_char; + if(is_c_string) + null_char = constant_of_nat(0,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); + else + null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + axioms.emplace_back(equal_exprt(length(), args[1])); + symbol_exprt idx = fresh_symbol("QA_index_set_length",refined_string_typet::index_type()); + string_constraintt a1 + (and_exprt(implies_exprt(s1 > idx, equal_exprt(s1[idx],(*this)[idx])), + implies_exprt(s1 <= idx, equal_exprt(s1[idx],null_char)))); + axioms.push_back(a1.forall(idx, index_zero, (*this).length())); +} + + + +//#include +void string_exprt::of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms) +{ + // this is not yet implemented + //std::cout << "of_java_char_array : " << char_array.pretty() << std::endl; + assert(false); +} + + +void string_exprt::of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + + exprt char_array = args[0]; + exprt offset = args[1]; + exprt count = args[2]; + string_exprt str(refined_string_typet::java_char_type()); + str.of_java_char_array(args[0],symbol_to_string,axioms); + axioms.emplace_back(equal_exprt(length(), count)); + + symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); + axioms.push_back(a1.forall(idx, index_zero, count)); +} + void string_exprt::of_string_substring (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 72a73677ca0..6e3c6ae3d59 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -92,6 +92,8 @@ class string_exprt : public struct_exprt { void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); @@ -105,6 +107,7 @@ class string_exprt : public struct_exprt { void of_bool(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); + void of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 58a1ce4d3be..7d6772c5070 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -12,7 +12,6 @@ Date: September 2016 #define char_literal_func "__CPROVER_uninterpreted_char_literal" #define string_length_func "__CPROVER_uninterpreted_strlen" -#define string_set_length_func "__CPROVER_uninterpreted_set_length" #define string_equal_func "__CPROVER_uninterpreted_string_equal_func" #define string_char_at_func "__CPROVER_uninterpreted_char_at" #define string_concat_func "__CPROVER_uninterpreted_strcat_func" @@ -45,6 +44,8 @@ Date: September 2016 #define string_to_lower_case_func "__CPROVER_uninterpreted_string_to_lower_case" #define string_to_upper_case_func "__CPROVER_uninterpreted_string_to_upper_case" #define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" +#define string_value_of_func "__CPROVER_uninterpreted_string_value_of" +#define string_set_length_func "__CPROVER_uninterpreted_string_set_length" bool starts_with(std::string s, std::string t) { @@ -156,5 +157,11 @@ bool is_string_to_upper_case_func(irep_idt id){ bool is_string_is_empty_func(irep_idt id){ return (starts_with(id2string(id),string_is_empty_func)); } +bool is_string_value_of_func(irep_idt id){ + return (starts_with(id2string(id),string_value_of_func)); +} +bool is_string_set_length_func(irep_idt id){ + return (starts_with(id2string(id),string_set_length_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 19e3e418f86..b7d0ba6cbff 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -51,5 +51,7 @@ bool is_string_trim_func(irep_idt id); bool is_string_to_lower_case_func(irep_idt id); bool is_string_to_upper_case_func(irep_idt id); bool is_string_is_empty_func(irep_idt id); +bool is_string_value_of_func(irep_idt id); +bool is_string_set_length_func(irep_idt id); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 33a7848df7c..e0d1c009d0f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -95,13 +95,14 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) make_string(sym,expr.rhs()); return false; } + /* else if(refined_string_typet::is_java_deref_string_type(type)) { debug() << "string_refinementt::boolbv_set_equality_to_true: warning" << " non pointer string " << eom; symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; - } + }*/ else if(type == char_type) { const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); From ff6b6403e2799b3a3a0eedfbe4326873b03dd3c2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 4 Oct 2016 11:03:23 +0100 Subject: [PATCH 110/221] added delete and deleteCharAt. Also improved the index simplification by grouping constants together --- src/goto-programs/pass_preprocess.cpp | 66 ++++++++++++++------ src/solvers/refinement/string_expr.cpp | 62 ++++++++++++++++++ src/solvers/refinement/string_expr.h | 2 + src/solvers/refinement/string_functions.cpp | 35 +++++++---- src/solvers/refinement/string_functions.h | 23 ++++--- src/solvers/refinement/string_refinement.cpp | 49 +++++++++------ 6 files changed, 176 insertions(+), 61 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index ea9df12e7bf..1e7b4fefe26 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -211,36 +211,62 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_long_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_bool_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_char_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_double_func",string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_float_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_char_at_func",string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); - } else if(function_id == irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")) { - make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { - make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_copy"); + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_copy"); + } else if(function_id == irep_idt + ("java::java.lang.String.:(Ljava/lang/String;)V")) { + make_string_function_call(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_copy"); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { + make_string_function_call(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt("java::java.lang.String.:()V")) { - make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); + make_string_function_call(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_empty_string"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { - make_string_function_call(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_empty_string"); - } else if(function_id == irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_of_int"); - } else if(function_id == irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_parse_int"); - } else if(function_id == irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_value_of"); + make_string_function_call(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_empty_string"); + } else if(function_id == irep_idt + ("java::java.lang.Integer.toString:(I)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_int"); + } else if(function_id == irep_idt + ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_parse_int"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_value_of"); } else if(function_id == irep_idt("java::java.lang.StringBuilder.setLength:(I)V")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_string_set_length",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it, + "__CPROVER_uninterpreted_string_set_length",string_builders); } } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index c5c85cbd4b1..08c01b1259f 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -154,6 +154,10 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_bool(expr,axioms); } else if (is_string_set_length_func(id)) { return of_string_set_length(expr,symbol_to_string,axioms); + } else if (is_string_delete_func(id)) { + return of_string_delete(expr,symbol_to_string,axioms); + } else if (is_string_delete_char_at_func(id)) { + return of_string_delete_char_at(expr,symbol_to_string,axioms); } else { std::string msg("string_exprt::of_function_application: unknown symbol :"); msg+=id.c_str(); @@ -282,8 +286,14 @@ void string_exprt::of_string_set_length(const function_application_exprt &f, std null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + + // |s| = k + // && forall i < |s|. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) + axioms.emplace_back(equal_exprt(length(), args[1])); symbol_exprt idx = fresh_symbol("QA_index_set_length",refined_string_typet::index_type()); + + string_constraintt a1 (and_exprt(implies_exprt(s1 > idx, equal_exprt(s1[idx],(*this)[idx])), implies_exprt(s1 <= idx, equal_exprt(s1[idx],null_char)))); @@ -668,6 +678,58 @@ void string_exprt::of_string_char_set } +void string_exprt::of_string_delete_char_at +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 2); + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt index = args[1]; + exprt index_one = refined_string_typet::index_of_int(1); + // s = deleteCharAt(str,index) + // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) + // forall i < index. i < |s| ==> s[i] = str[i] + // forall i >= index. i < |s| ==> s[i] = str[i+1] + axioms.emplace_back(str > index, equal_exprt(length(), minus_exprt(str.length(),index_one))); + axioms.emplace_back(str <= index, equal_exprt(length(), str.length())); + + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_delete_char_at", refined_string_typet::index_type()); + string_constraintt sc((*this) > qvar,equal_exprt((*this)[qvar],str[qvar])); + axioms.push_back(sc.forall(qvar,index_zero,index)); + + symbol_exprt qvar2 = string_exprt::fresh_symbol("qvar_delete_char_at", refined_string_typet::index_type()); + string_constraintt sc2(equal_exprt((*this)[qvar2],str[plus_exprt(qvar2,index_one)])); + axioms.push_back(sc2.forall(qvar2,index,length())); +} + +void string_exprt::of_string_delete +(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); + + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt start = args[1]; + exprt end = args[2]; + // s = delete(str,start,end) + // start >= |str| ==> |s| = |str| + // start < |str| && end >= |str| ==> |s| = start + // start < |str| && end < |str| ==> |s| = |str| - (end - start) + // forall i < start. i < |s| ==> s[i] = str[i] + // forall i >= start. i < |s| ==> s[i] = str[i + (end - start)] + axioms.emplace_back(str <= start, equal_exprt(length(), str.length())); + axioms.emplace_back(and_exprt(str > start, str <= end), equal_exprt(length(), start)); + axioms.emplace_back(and_exprt(str > start, str > end), equal_exprt(length(), minus_exprt(str.length(),minus_exprt(end,start)))); + + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_delete", refined_string_typet::index_type()); + string_constraintt sc((*this) > qvar,equal_exprt((*this)[qvar],str[qvar])); + axioms.push_back(sc.forall(qvar,index_zero,start)); + + symbol_exprt qvar2 = string_exprt::fresh_symbol("qvar_delete", refined_string_typet::index_type()); + string_constraintt sc2((*this) > qvar2,equal_exprt((*this)[qvar2],str[plus_exprt(qvar2,minus_exprt(end,start))])); + axioms.push_back(sc2.forall(qvar2,start,length())); +} + void string_exprt::of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ const function_application_exprt::argumentst &args = f.arguments(); diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 6e3c6ae3d59..aa9fb6c276e 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -92,6 +92,8 @@ class string_exprt : public struct_exprt { void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 7d6772c5070..37f6b515920 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -11,7 +11,6 @@ Date: September 2016 #define char_literal_func "__CPROVER_uninterpreted_char_literal" -#define string_length_func "__CPROVER_uninterpreted_strlen" #define string_equal_func "__CPROVER_uninterpreted_string_equal_func" #define string_char_at_func "__CPROVER_uninterpreted_char_at" #define string_concat_func "__CPROVER_uninterpreted_strcat_func" @@ -21,29 +20,33 @@ Date: September 2016 #define string_concat_bool_func "__CPROVER_uninterpreted_strcat_bool_func" #define string_concat_float_func "__CPROVER_uninterpreted_strcat_float_func" #define string_concat_double_func "__CPROVER_uninterpreted_strcat_double_func" -#define string_substring_func "__CPROVER_uninterpreted_substring" -#define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" -#define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" -#define string_endswith_func "__CPROVER_uninterpreted_string_endswith" -#define string_startswith_func "__CPROVER_uninterpreted_string_startswith" #define string_contains_func "__CPROVER_uninterpreted_strcontains" #define string_char_set_func "__CPROVER_uninterpreted_char_set" +#define string_copy_func "__CPROVER_uninterpreted_string_copy" +#define string_delete_func "__CPROVER_uninterpreted_string_delete_func" +#define string_delete_char_at_func "__CPROVER_uninterpreted_string_delete_char_at_func" +#define string_empty_string_func "__CPROVER_uninterpreted_empty_string" +#define string_endswith_func "__CPROVER_uninterpreted_string_endswith" +#define string_equals_ignore_case_func "__CPROVER_uninterpreted_string_equals_ignore_case" +#define string_hash_code_func "__CPROVER_uninterpreted_string_hash_code_func" #define string_index_of_func "__CPROVER_uninterpreted_strindexof" +#define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" +#define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" +#define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" #define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" #define string_literal_func "__CPROVER_uninterpreted_string_literal" -#define string_copy_func "__CPROVER_uninterpreted_string_copy" -#define string_empty_string_func "__CPROVER_uninterpreted_empty_string" -#define string_parse_int_func "__CPROVER_uninterpreted_parse_int" +#define string_length_func "__CPROVER_uninterpreted_strlen" #define string_of_int_func "__CPROVER_uninterpreted_string_of_int" #define string_of_long_func "__CPROVER_uninterpreted_string_of_long" #define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" #define string_of_float_func "__CPROVER_uninterpreted_string_of_float" #define string_of_double_func "__CPROVER_uninterpreted_string_of_double" -#define string_equals_ignore_case_func "__CPROVER_uninterpreted_string_equals_ignore_case" +#define string_substring_func "__CPROVER_uninterpreted_substring" +#define string_startswith_func "__CPROVER_uninterpreted_string_startswith" +#define string_parse_int_func "__CPROVER_uninterpreted_parse_int" #define string_trim_func "__CPROVER_uninterpreted_string_trim" #define string_to_lower_case_func "__CPROVER_uninterpreted_string_to_lower_case" #define string_to_upper_case_func "__CPROVER_uninterpreted_string_to_upper_case" -#define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" #define string_value_of_func "__CPROVER_uninterpreted_string_value_of" #define string_set_length_func "__CPROVER_uninterpreted_string_set_length" @@ -163,5 +166,15 @@ bool is_string_value_of_func(irep_idt id){ bool is_string_set_length_func(irep_idt id){ return (starts_with(id2string(id),string_set_length_func)); } +bool is_string_delete_func(irep_idt id){ + return (starts_with(id2string(id),string_delete_func)); +} +bool is_string_delete_char_at_func(irep_idt id){ + return (starts_with(id2string(id),string_delete_char_at_func)); +} +bool is_string_hash_code_func(irep_idt id){ + return (starts_with(id2string(id),string_hash_code_func)); +} + diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index b7d0ba6cbff..7661f3f3402 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -22,6 +22,7 @@ bool is_char_literal_func(irep_idt id); bool is_string_length_func(irep_idt id); bool is_string_equal_func(irep_idt id); bool is_string_char_at_func(irep_idt id); +bool is_string_char_set_func(irep_idt id); bool is_string_concat_func(irep_idt id); bool is_string_concat_int_func(irep_idt id); bool is_string_concat_long_func(irep_idt id); @@ -29,29 +30,31 @@ bool is_string_concat_char_func(irep_idt id); bool is_string_concat_bool_func(irep_idt id); bool is_string_concat_double_func(irep_idt id); bool is_string_concat_float_func(irep_idt id); -bool is_string_substring_func(irep_idt id); +bool is_string_contains_func(irep_idt id); +bool is_string_copy_func(irep_idt id); +bool is_string_delete_func(irep_idt id); +bool is_string_delete_char_at_func(irep_idt id); +bool is_string_equals_ignore_case_func(irep_idt id); +bool is_string_empty_string_func(irep_idt id); +bool is_string_endswith_func(irep_idt id); +bool is_string_hash_code_func(irep_idt id); bool is_string_is_prefix_func(irep_idt id); bool is_string_is_suffix_func(irep_idt id); -bool is_string_startswith_func(irep_idt id); -bool is_string_endswith_func(irep_idt id); -bool is_string_contains_func(irep_idt id); -bool is_string_char_set_func(irep_idt id); +bool is_string_is_empty_func(irep_idt id); bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); -bool is_string_copy_func(irep_idt id); -bool is_string_empty_string_func(irep_idt id); bool is_string_parse_int_func(irep_idt id); bool is_string_of_int_func(irep_idt id); bool is_string_of_long_func(irep_idt id); bool is_string_of_bool_func(irep_idt id); bool is_string_of_float_func(irep_idt id); bool is_string_of_double_func(irep_idt id); -bool is_string_equals_ignore_case_func(irep_idt id); bool is_string_trim_func(irep_idt id); bool is_string_to_lower_case_func(irep_idt id); bool is_string_to_upper_case_func(irep_idt id); -bool is_string_is_empty_func(irep_idt id); -bool is_string_value_of_func(irep_idt id); bool is_string_set_length_func(irep_idt id); +bool is_string_startswith_func(irep_idt id); +bool is_string_substring_func(irep_idt id); +bool is_string_value_of_func(irep_idt id); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index e0d1c009d0f..265d8bbe118 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -1075,32 +1075,41 @@ std::map< exprt, int> string_refinementt::map_of_sum(const exprt &f) { exprt string_refinementt::sum_of_map(std::map & m, bool negated) { - exprt sum = refined_string_typet::refined_string_typet::index_of_int(0); + exprt sum = refined_string_typet::index_of_int(0); + mp_integer constants = 0; for (std::map::iterator it = m.begin(); it != m.end(); it++) { + // We should group constants together... const exprt &t = it->first; int second = negated?(-it->second):it->second; - if (second != 0) - if (second == -1) - if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); - else sum = minus_exprt(sum,t); - else if (second == 1) - if(sum == refined_string_typet::index_of_int(0)) sum = t; - else sum = plus_exprt(sum, t); - else { - debug() << "in string_refinementt::sum_of_map:" - << " warning: several occurences of the same variable " << eom; - variable_with_multiple_occurence_in_index = true; - if(second > 1) - for(int i = 0; i < second; i++) - sum = plus_exprt(sum, t); - else - for(int i = 0; i > second; i--) - sum = minus_exprt(sum, t); - } + if(t.id() == ID_constant) { + std::string value(to_constant_expr(t).get_value().c_str()); + constants += binary2integer(value,true) * second; + } else { + if (second != 0) + if (second == -1) + if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); + else sum = minus_exprt(sum,t); + else if (second == 1) + if(sum == refined_string_typet::index_of_int(0)) sum = t; + else sum = plus_exprt(sum, t); + else { + debug() << "in string_refinementt::sum_of_map:" + << " warning: several occurences of the same variable: " + << t.pretty() << eom; + variable_with_multiple_occurence_in_index = true; + if(second > 1) + for(int i = 0; i < second; i++) + sum = plus_exprt(sum, t); + else + for(int i = 0; i > second; i--) + sum = minus_exprt(sum, t); + } + } } - return sum; + + return plus_exprt(sum,constant_exprt(integer2binary(constants, STRING_SOLVER_INDEX_WIDTH), refined_string_typet::index_type())); } exprt string_refinementt::simplify_sum(const exprt &f) { From 74a7d6be53541b680bf90067ea40918761670e1a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 4 Oct 2016 11:03:51 +0100 Subject: [PATCH 111/221] tests for delete and deleteCharAt --- .../strings/java_delete/test_delete.class | Bin 0 -> 1024 bytes .../strings/java_delete/test_delete.java | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 regression/strings/java_delete/test_delete.class create mode 100644 regression/strings/java_delete/test_delete.java diff --git a/regression/strings/java_delete/test_delete.class b/regression/strings/java_delete/test_delete.class new file mode 100644 index 0000000000000000000000000000000000000000..fba9bb3d399f60cec838241c6f242092344aa784 GIT binary patch literal 1024 zcmaJg!@u~>7j0zHp4*XO=-{gVB{>r-p!SzYudYcl^88c zqxyc!Xms$Tnq!tBRH$0V{94&*x>fPiRBUl6Jo&aJEFr~=;?vQGeulxnxmTN}RTD1h z+z^)Kq;)*NoQ{Whq~kH>ITm!}QQ&x@V-ZU_5=fHR4Z@ND9m`l@80xaFoU~!xbseIO zoDssYs-uWClGjamzOyH)^4!%?)g;MiG=xokoX%X*lM7eJrQ|8`sBnflY2okl0+knIwd4KrJcWK;0*<`Xu$oK)k5>t zJZZSntC;fLKR{%rShsIQiyTLOsR_??MeVfjWE0t>2eR8XM#;FnWOf!GQiG$NA51xc z)&V-DC^Cw{$pf%23Wz~kdpeg4VGQ9a?G^MBrTQr@9K!ed0RB=o5ojY=$p(UL^i;BK z@U4A>rrHSaLu;XLDiLWzZy|DsC?#C^q4<3r{t Date: Tue, 4 Oct 2016 17:05:59 +0100 Subject: [PATCH 112/221] tests for delete and deleteCharAt --- regression/strings/java_delete/test.desc | 8 ++ .../strings/java_delete/test_delete.class | Bin 1024 -> 1126 bytes .../strings/java_delete/test_delete.java | 14 ++-- src/solvers/refinement/string_expr.cpp | 76 ++++++++---------- src/solvers/refinement/string_expr.h | 22 ++--- src/solvers/refinement/string_refinement.cpp | 13 +-- src/solvers/refinement/string_refinement.h | 4 +- 7 files changed, 71 insertions(+), 66 deletions(-) create mode 100644 regression/strings/java_delete/test.desc diff --git a/regression/strings/java_delete/test.desc b/regression/strings/java_delete/test.desc new file mode 100644 index 00000000000..18644eddf6a --- /dev/null +++ b/regression/strings/java_delete/test.desc @@ -0,0 +1,8 @@ +CORE +test_delete.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_char_at.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_char_at.java line 12: FAILURE$ +-- diff --git a/regression/strings/java_delete/test_delete.class b/regression/strings/java_delete/test_delete.class index fba9bb3d399f60cec838241c6f242092344aa784..6d30024f108aeca8a2d4587aec50ce79b2f35ddf 100644 GIT binary patch delta 572 zcmYL`Pfrt36vclt)6SbtA5aPu)T*>97N%Gg5f%Rw5v&GdjEmxOl!=B+Bw}@oap|t< z$}ZjLR!pXeB)Zq{;nojeG~S0nHs`*3bIv{Y-uKG;;jMoA^Z5%f!!4gYB}LiCrsQ$V z#N!4|7??0{GDC$)pDBV2IjSDhKBuTDPW$v5^%H}(#PL6o^wZp6sdLW? z+-1#88lBhHn?b!6#ZfC-d=hRhv@D91&QI$@(T$$H2;=7#BbAl)@MTzw!>5mHcOR}t zk6N9cJ-3yUjls%|86SB$2$zE3sAPvFS`yP!J*9dz(IK%>N}A-5?6Py zAM|imf_y3=-3(ODO>momWU3h?cz3qRR1^GdvfV9)t9hN!*Co3{zX%7un)+V(?S9$V z+q?D?Vhkxf(hSHjqbQj)Lm8h*veeNu@<>={T(B5ey3jyELL#$sfooV{ zFG%JOxE7Npkpx}4@>lp9+-STtiMl!GR@FWCoLfJlchSbT-=8mlIo1q4)HI_8k6Of- zF~wqnf$n@3VfD%kR}tv#|bZ zcXzL5nWtg7$9>BK7Bo%ELmp`!Tb{6JsnDwk)}>eUmL;BMuT@%Dwydz4ov6d?g?E&g z{r1Z@?fuqHdprB;^=Ci5#z9HagDMZW8B+Nu#9XjXPQ$`VIGi~{eRPfV3l_SUikJbe zNbOqRiqscwp5twu;Xg|&K~C68gD|JiN^|t{Q=)oKe2VE%tyhwq1KS}vrzna`Uz~y0 zH5frl9S{-9r)e>W8N@I~!UAQk%4>r9<^Ez&GbD|}|3Wvq>7dd}DW}{)2OkLhPniD( Te>bSQNg-Zw$t^n44RGxba5_A= diff --git a/regression/strings/java_delete/test_delete.java b/regression/strings/java_delete/test_delete.java index a8c4104f7ab..c91b16c5b89 100644 --- a/regression/strings/java_delete/test_delete.java +++ b/regression/strings/java_delete/test_delete.java @@ -2,16 +2,14 @@ public class test_delete { public static void main(String[] argv) { StringBuilder s = new StringBuilder(); - s.append("Hello "); //o World!"); - //s.delete(4,6); - s.delete(1,2); - //s.deleteCharAt(4); + s.append("Hello World!"); + s.delete(4,6); + s.deleteCharAt(1); + String str = s.toString(); System.out.println(str); - assert(str.startsWith("Hllo")); - //assert(!str.equals("Hllo World")); - //assert(str.equals("HllWorld!")); - //assert(!str.equals("HllWorld!")); + assert(str.equals("HllWorld!")); + assert(!str.equals("HllWorld!")); } } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 08c01b1259f..efd26037058 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -232,7 +232,7 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ } -void string_exprt::of_string_concat(string_exprt s1, string_exprt s2, std::map & symbol_to_string, axiom_vect & axioms) { +void string_exprt::of_string_concat(const string_exprt & s1, const string_exprt & s2, std::map & symbol_to_string, axiom_vect & axioms) { equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); @@ -337,21 +337,27 @@ void string_exprt::of_string_substring string_exprt str = of_expr(args[0],symbol_to_string,axioms); exprt i(args[1]); - assert(i.type() == refined_string_typet::index_type()); exprt j; if(args.size() == 3) j = args[2]; else j = str.length(); - assert(j.type() == refined_string_typet::index_type()); + of_string_substring(str,i,j,symbol_to_string,axioms); +} + +void string_exprt::of_string_substring + (const string_exprt & str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms) +{ symbol_exprt idx = fresh_symbol("index_substring", refined_string_typet::index_type()); + assert(start.type() == refined_string_typet::index_type()); + assert(end.type() == refined_string_typet::index_type()); - axioms.emplace_back(equal_exprt(length(), minus_exprt(j, i))); - axioms.emplace_back(binary_relation_exprt(i, ID_lt, j)); - axioms.emplace_back(str >= j); + axioms.emplace_back(equal_exprt(length(), minus_exprt(end, start))); + axioms.emplace_back(binary_relation_exprt(start, ID_lt, end)); + axioms.emplace_back(str >= end); // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(i, idx)])); + string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(start, idx)])); axioms.push_back(a.forall(idx,index_zero,length())); } @@ -684,22 +690,29 @@ void string_exprt::of_string_delete_char_at const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 2); string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt index = args[1]; exprt index_one = refined_string_typet::index_of_int(1); - // s = deleteCharAt(str,index) - // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) - // forall i < index. i < |s| ==> s[i] = str[i] - // forall i >= index. i < |s| ==> s[i] = str[i+1] - axioms.emplace_back(str > index, equal_exprt(length(), minus_exprt(str.length(),index_one))); - axioms.emplace_back(str <= index, equal_exprt(length(), str.length())); - - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_delete_char_at", refined_string_typet::index_type()); - string_constraintt sc((*this) > qvar,equal_exprt((*this)[qvar],str[qvar])); - axioms.push_back(sc.forall(qvar,index_zero,index)); + of_string_delete(str,args[1],plus_exprt(args[1],index_one),symbol_to_string,axioms); +} - symbol_exprt qvar2 = string_exprt::fresh_symbol("qvar_delete_char_at", refined_string_typet::index_type()); - string_constraintt sc2(equal_exprt((*this)[qvar2],str[plus_exprt(qvar2,index_one)])); - axioms.push_back(sc2.forall(qvar2,index,length())); +void string_exprt::of_string_delete +(const string_exprt &str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms) +{ + // We should have these formulas: + // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) + // forall i < |s| (i < index ==> s[i] = str[i] + // && i >= index ==> s[i] = str[i+1]) + // However this may make the index set computation loop because the same + // index appears switched by one. + // It may be better to call two substrings functions + + assert(start.type() == refined_string_typet::index_type()); + assert(end.type() == refined_string_typet::index_type()); + string_exprt str1(refined_string_typet::get_char_type(str)); + string_exprt str2(refined_string_typet::get_char_type(str)); + str1.of_string_substring(str,index_zero,start,symbol_to_string,axioms); + str2.of_string_substring(str,end,str.length(),symbol_to_string,axioms); + of_string_concat(str1,str2,symbol_to_string,axioms); + } void string_exprt::of_string_delete @@ -707,27 +720,8 @@ void string_exprt::of_string_delete { const function_application_exprt::argumentst &args = expr.arguments(); assert(args.size() == 3); - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt start = args[1]; - exprt end = args[2]; - // s = delete(str,start,end) - // start >= |str| ==> |s| = |str| - // start < |str| && end >= |str| ==> |s| = start - // start < |str| && end < |str| ==> |s| = |str| - (end - start) - // forall i < start. i < |s| ==> s[i] = str[i] - // forall i >= start. i < |s| ==> s[i] = str[i + (end - start)] - axioms.emplace_back(str <= start, equal_exprt(length(), str.length())); - axioms.emplace_back(and_exprt(str > start, str <= end), equal_exprt(length(), start)); - axioms.emplace_back(and_exprt(str > start, str > end), equal_exprt(length(), minus_exprt(str.length(),minus_exprt(end,start)))); - - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_delete", refined_string_typet::index_type()); - string_constraintt sc((*this) > qvar,equal_exprt((*this)[qvar],str[qvar])); - axioms.push_back(sc.forall(qvar,index_zero,start)); - - symbol_exprt qvar2 = string_exprt::fresh_symbol("qvar_delete", refined_string_typet::index_type()); - string_constraintt sc2((*this) > qvar2,equal_exprt((*this)[qvar2],str[plus_exprt(qvar2,minus_exprt(end,start))])); - axioms.push_back(sc2.forall(qvar2,start,length())); + of_string_delete(str,args[1],args[2],symbol_to_string,axioms); } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index aa9fb6c276e..8d73a74060c 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -50,25 +50,25 @@ class string_exprt : public struct_exprt { static exprt within_bounds(const exprt & idx, const exprt & bound); // Expression of the character at position idx in the string - inline index_exprt operator[] (exprt idx) + inline index_exprt operator[] (const exprt & idx) const { return index_exprt(content(), idx);} // Comparison on the length of the strings - inline binary_relation_exprt operator< (string_exprt rhs) + inline binary_relation_exprt operator< (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } - inline binary_relation_exprt operator> (string_exprt rhs) + inline binary_relation_exprt operator> (const string_exprt & rhs) const { return binary_relation_exprt(rhs.length(), ID_lt, length()); } - inline binary_relation_exprt operator<= (string_exprt rhs) + inline binary_relation_exprt operator<= (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs.length()); } - inline binary_relation_exprt operator>= (string_exprt rhs) + inline binary_relation_exprt operator>= (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt operator< (const exprt & rhs) + inline binary_relation_exprt operator< (const exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs); } - inline binary_relation_exprt operator> (const exprt & rhs) + inline binary_relation_exprt operator> (const exprt & rhs) const { return binary_relation_exprt(rhs, ID_lt, length()); } - inline binary_relation_exprt operator>= (const exprt & rhs) + inline binary_relation_exprt operator>= (const exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs); } - inline binary_relation_exprt operator<= (const exprt & rhs) + inline binary_relation_exprt operator<= (const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } static irep_idt extract_java_string(const symbol_exprt & s); @@ -79,7 +79,7 @@ class string_exprt : public struct_exprt { // Auxiliary functions for of_expr void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - void of_string_concat(string_exprt s1, string_exprt s2, std::map & symbol_to_string, axiom_vect & axioms); + void of_string_concat(const string_exprt & s1, const string_exprt & s2, std::map & symbol_to_string, axiom_vect & axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); @@ -87,11 +87,13 @@ class string_exprt : public struct_exprt { void of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_substring(const string_exprt & str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_delete (const string_exprt &str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); void of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 265d8bbe118..d0183162149 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -266,7 +266,7 @@ decision_proceduret::resultt string_refinementt::dec_solve() { debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; - update_index_set(universal_axioms); + initial_index_set(universal_axioms); update_index_set(cur); cur.clear(); add_instantiations(); @@ -1180,9 +1180,9 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) { } -void string_refinementt::update_index_set(const axiom_vect & string_axioms) { +void string_refinementt::initial_index_set(const axiom_vect & string_axioms) { for (size_t i = 0; i < string_axioms.size(); ++i) { - update_index_set(string_axioms[i]); + initial_index_set(string_axioms[i]); } } @@ -1192,7 +1192,7 @@ void string_refinementt::update_index_set(const std::vector & cur) { } } -void string_refinementt::update_index_set(const string_constraintt &axiom) +void string_refinementt::initial_index_set(const string_constraintt &axiom) { assert(axiom.is_univ_quant()); std::vector bounds; @@ -1238,8 +1238,11 @@ void string_refinementt::update_index_set(const exprt &formula) const exprt &i = cur.op1(); assert(s.type().id() == ID_array); const exprt &simplified = simplify_sum(i); - if(index_set[s].insert(simplified).second) + if(index_set[s].insert(simplified).second) { + debug() << "adding to index set of " << pretty_short(s) + << ": " << pretty_short(simplified) << eom; current_index_set[s].insert(simplified); + } } else { forall_operands(it, cur) { to_process.push_back(*it); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 22d441d80b6..2a7d8fcbf99 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -137,8 +137,8 @@ class string_refinementt: public bv_refinementt // Add to the index set all the indices that appear in the formula void update_index_set(const exprt &formula); void update_index_set(const std::vector &cur); - void update_index_set(const string_constraintt &axiom); - void update_index_set(const axiom_vect &string_axioms); + void initial_index_set(const string_constraintt &axiom); + void initial_index_set(const axiom_vect &string_axioms); // Takes an universaly quantified formula [axiom], // an array of char variable [s], and an index expression [val]. From 3da76020d3cfd54f90f9dec3f74b0d177715fdfa Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 4 Oct 2016 17:11:29 +0100 Subject: [PATCH 113/221] tests for delete and deleteCharAt --- regression/strings/java_delete/test.desc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/regression/strings/java_delete/test.desc b/regression/strings/java_delete/test.desc index 18644eddf6a..2c1f0a63a3f 100644 --- a/regression/strings/java_delete/test.desc +++ b/regression/strings/java_delete/test.desc @@ -3,6 +3,6 @@ test_delete.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_char_at.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_char_at.java line 12: FAILURE$ +^\[assertion.1\] assertion at file test_delete.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_delete.java line 12: FAILURE$ -- From 185eb92f8828de4824450e9ca0753ffee8e12958 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 10:54:28 +0100 Subject: [PATCH 114/221] added startsWith(char,fromIndex) --- regression/strings/java_index_of/test.desc | 10 +-- .../strings/java_index_of/test_index_of.class | Bin 794 -> 887 bytes .../strings/java_index_of/test_index_of.java | 16 +++-- src/goto-programs/pass_preprocess.cpp | 4 +- src/solvers/refinement/string_constraint.cpp | 2 +- src/solvers/refinement/string_constraint.h | 8 ++- src/solvers/refinement/string_expr.cpp | 2 +- src/solvers/refinement/string_refinement.cpp | 66 ++++++++++-------- src/solvers/refinement/string_refinement.h | 5 +- 9 files changed, 67 insertions(+), 46 deletions(-) diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index d89d7eaf8cd..1ea5bab7568 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -3,8 +3,10 @@ test_index_of.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_index_of.java line 8: SUCCESS$ -^\[assertion.2\] assertion at file test_index_of.java line 9: SUCCESS$ -^\[assertion.3\] assertion at file test_index_of.java line 12: FAILURE$ -^\[assertion.4\] assertion at file test_index_of.java line 14: FAILURE$ +^\[assertion.1\] assertion at file test_index_of.java line 10: SUCCESS$ +^\[assertion.2\] assertion at file test_index_of.java line 11: FAILURE$ +^\[assertion.3\] assertion at file test_index_of.java line 14: SUCCESS$ +^\[assertion.4\] assertion at file test_index_of.java line 15: FAILURE$ +^\[assertion.5\] assertion at file test_index_of.java line 18: SUCCESS$ +^\[assertion.6\] assertion at file test_index_of.java line 19: FAILURE$ -- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class index 61a7adfefa23a55af23c048c88bcae8b81f4851b..22bbf49912ffae1d5df8d7125070442413460ce2 100644 GIT binary patch delta 564 zcmZXRJ5L)y6otRBcW1oI8a8V?IL0PClK2$|2{2L+L@BWpr9~8}fCgEzged6z3n(l) zH(7;(CQTB_NI^0^e~1pavywqkrZ_Wu?wPyyoEhpn{qgqx?-*EP#b=6AhB==y6$|qg zUVC^f7#4jDCBu@>GH(oT2kR%!J41EwbEQ7bj3U@M>~?z#yS?M?!J-rbYSaT77HTvD z0`lj7lr&I5opQ-h}Cw~VO7OhN9X%x~{FqE%~>`HdGafSM2g}e~d z38`elh@6~7sB-~NO#2ikj#@LN%C55QqgjPN&CFGVRW7_|aQNjIRnUL}Gb?YRRIO%VSTX1A} zSH{Wk1{Oi^-_39s#DRPA~uf delta 455 zcmZWlJxjw-6g@9}$xG5yWBOsWt+v`)O%=f}5UPligR6*xn=V=ih$!MO?* z6e>9SV_eo_p^(_s!@UD=+U40|3jIw_#(<#JG(Dicu(8FfpMpX~V#n zLfJ+IQwr0a^>bNOsC9aa)f9#VoSoxVD=6;=XRV_O3l3&bcQ6};B%II^3&xxSAC0gn z4#O+4R4};>5N_hpro)z~E9rD67Ab)n=9 Zq@TEh{=4`4646W@T53zMYm|wG{3lejJ3IgY diff --git a/regression/strings/java_index_of/test_index_of.java b/regression/strings/java_index_of/test_index_of.java index 5b9680c6c79..f22257d5a27 100644 --- a/regression/strings/java_index_of/test_index_of.java +++ b/regression/strings/java_index_of/test_index_of.java @@ -5,12 +5,18 @@ public static void main(String[] argv) { char c = 'o'; int i = s.indexOf(c); int j = s.lastIndexOf('o'); - assert(i == 4); - assert(j == 7); - - if(argv.length > 1) + int k = s.indexOf(c,5); + if(argv.length == 1){ + assert(i == 4); assert(i != 4); - else + } + else if(argv.length == 2){ + assert(j == 7); assert(j != 7); + } + else { + assert(k == 7); + assert(k != 7); + } } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 1e7b4fefe26..948ada686fe 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -174,7 +174,9 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); - } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I")) { + } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I") + || function_id == irep_idt("java::java.lang.String.indexOf:(II)I") + ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strindexof"); } else if(function_id == irep_idt("java::java.lang.String.lastIndexOf:(I)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlastindexof"); diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 22c9f449afb..c6fbf6016db 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -59,7 +59,7 @@ string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt string_constraintt string_constraintt::exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) { - assert(form == SIMPLE); + assert(is_simple() || is_string_constant()); return string_constraintt (and_exprt(*this, and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 07d6e9b55b2..58c0211e2d5 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -16,12 +16,13 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com class string_constraintt : public exprt { private: - // String axioms can have 3 different forms: + // String axioms can have 4 different forms: // either a simple expression p, + // or a string constant: forall x in [0,|s|[. s(x) = c(x) // or universally quantified expression: forall x in [lb,ub[. p(x) // or a expression for non containment: // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[y] - enum {SIMPLE, UNIV_QUANT, NOT_CONTAINS} form; + enum {SIMPLE, STRING_CONSTANT, UNIV_QUANT, NOT_CONTAINS} form; // Universally quantified symbol symbol_exprt quantified_variable; @@ -40,7 +41,7 @@ class string_constraintt : public exprt string_constraintt() : exprt(true_exprt()) { form = SIMPLE; } // Axiom with no quantification, and no premise - string_constraintt(exprt bod) : exprt(bod) { form = SIMPLE; } + string_constraintt(exprt bod, bool is_string_constant=false) : exprt(bod) { form = is_string_constant?SIMPLE:STRING_CONSTANT; } // Axiom with no quantification: prem => bod string_constraintt(exprt prem, exprt bod) : exprt(implies_exprt(prem,bod)) @@ -57,6 +58,7 @@ class string_constraintt : public exprt exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1); bool is_simple() const { return (form == SIMPLE); }; + bool is_string_constant() const { return (form == STRING_CONSTANT); }; bool is_univ_quant() const { return (form == UNIV_QUANT); }; bool is_not_contains() const { return (form == NOT_CONTAINS); }; diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index efd26037058..35fe830cd0b 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -180,7 +180,7 @@ void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_ std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); - axioms.emplace_back(lemma); + axioms.emplace_back(lemma,true); } std::string s_length_binary = integer2binary(unsigned(sval.size()),STRING_SOLVER_INDEX_WIDTH); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index d0183162149..3cf3a8acf10 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -207,7 +207,7 @@ bvt string_refinementt::convert_function_application( } else if (is_string_contains_func(id)) { return convert_string_contains(expr); } else if (is_string_index_of_func(id)) { - return convert_string_index_of(expr); + return convert_bv(convert_string_index_of(expr)); } else if (is_string_last_index_of_func(id)) { return convert_string_last_index_of(expr); } else if (is_string_parse_int_func(id)) { @@ -231,6 +231,8 @@ void string_refinementt::post_process() for(int i = 0; i < string_axioms.size(); i++) if(string_axioms[i].is_simple()) add_lemma(string_axioms[i]); + else if(string_axioms[i].is_string_constant()) + add_lemma(string_axioms[i]); //,false); else if(string_axioms[i].is_univ_quant()) universal_axioms.push_back(string_axioms[i]); else { @@ -337,7 +339,7 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) return ret; } -void string_refinementt::add_lemma(const exprt &lemma) +void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) { if (!seen_instances.insert(lemma).second) return; @@ -346,7 +348,8 @@ void string_refinementt::add_lemma(const exprt &lemma) debug() << "adding lemma " << pretty_short(lemma) << eom; prop.l_set_to_true(convert(lemma)); - cur.push_back(lemma); + if(add_to_index_set) + cur.push_back(lemma); } @@ -636,45 +639,50 @@ symbol_exprt string_refinementt::fresh_boolean(const irep_idt &prefix){ return b; } -bvt string_refinementt::convert_string_index_of( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string index of? - if(f.type() != index_type) { - debug() << "convert_string_index_of of the wrong type "<< f.type().pretty() << eom; - assert(false); - } - + +exprt string_refinementt::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ symbol_exprt index = fresh_index("index_of"); symbol_exprt contains = fresh_boolean("contains_in_index_of"); - string_exprt str = make_string(args[0]); - exprt c = args[1]; - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); - } - - // 0 <= i < |s| && (i = -1 <=> !contains) && (contains => s[i] = c) - // && forall n. 0 < n < i => s[n] != c + // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) + // && forall n. from_index <= n < i => s[n] != c string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); - + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,zero,index)); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); symbol_exprt m = string_exprt::fresh_symbol("QA_index_of",index_type); - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); - bvt bv = convert_bv(index); - return bv; + return index; +} + + +exprt string_refinementt::convert_string_index_of( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(f.type() == index_type); + string_exprt str = make_string(args[0]); + exprt c = args[1]; + exprt from_index; + + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + + if(args.size() == 2) from_index = zero; + else if (args.size() == 3) from_index = args[2]; + else assert(false); + + return convert_string_index_of(str,c,from_index); } bvt string_refinementt::convert_string_last_index_of( diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 2a7d8fcbf99..18761f665c3 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -62,7 +62,8 @@ class string_refinementt: public bv_refinementt bvt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_contains(const function_application_exprt &f); - bvt convert_string_index_of(const function_application_exprt &f); + exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt convert_string_index_of(const function_application_exprt &f); bvt convert_string_last_index_of(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); @@ -121,7 +122,7 @@ class string_refinementt: public bv_refinementt // Natural number expression corresponding to a constant integer constant_exprt constant_of_nat(int i,typet t); - void add_lemma(const exprt &lemma); + void add_lemma(const exprt &lemma, bool add_to_index_set=true); //void set_to(const exprt &expr, bool value); bool boolbv_set_equality_to_true(const equal_exprt &expr); From 731623d21edbeb5709d2dde7d6742fb8473ec697 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 11:23:50 +0100 Subject: [PATCH 115/221] added indexOf and lastIndexOf with fromIndex argument --- regression/strings/java_index_of/test.desc | 2 + .../strings/java_index_of/test_index_of.class | Bin 887 -> 980 bytes .../strings/java_index_of/test_index_of.java | 8 ++- src/goto-programs/pass_preprocess.cpp | 6 ++- src/solvers/refinement/string_refinement.cpp | 48 +++++++++++------- src/solvers/refinement/string_refinement.h | 3 +- 6 files changed, 47 insertions(+), 20 deletions(-) diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index 1ea5bab7568..70baa6c488a 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -9,4 +9,6 @@ test_index_of.class ^\[assertion.4\] assertion at file test_index_of.java line 15: FAILURE$ ^\[assertion.5\] assertion at file test_index_of.java line 18: SUCCESS$ ^\[assertion.6\] assertion at file test_index_of.java line 19: FAILURE$ +^\[assertion.7\] assertion at file test_index_of.java line 24: SUCCESS$ +^\[assertion.8\] assertion at file test_index_of.java line 25: FAILURE$ -- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class index 22bbf49912ffae1d5df8d7125070442413460ce2..f56aeb29be8d0df7e7a3e5974600c17287f01a45 100644 GIT binary patch literal 980 zcmZuwT~E_s6n187vX{k z<04EXpyDFOB^7ZLIVM$H#ubjM44Fy8_f0RbT*tp>`9{k&I}B`{L7B50D_CHNl`Cru z(vsUT8Bz_)F<16?Tc-C|kSVciSPsK*`B`Jzcwx-ghO;%(3_Q!(x+4k)n}N~Zd1&l~ ze2y|lg&{uIw*Tp?O?TgGo6D9^O9!SOY*mdO57+6;v7RhYUFNzy8E8zdeqG+eU51jGq}#6M?UCbarxm*v?RP>1@BKYK4$Mh}F?3^@7Rt5W%Aj{V=K}*wU zw@lBAvFH{9EdV;jA$lv($>@};hhU!s5owA_2r?v)L6+`BWzVUUQ|@PaprO0-wXq&z z3pL&CL7J6nWAPs3SvfqFS*3a;by4{YegM71-y``A@u!DKd=H^_CEmrGK2$xDyO;_S z>71mWVebjB3oGI)5nn#bU(6BM#qEesZ?#Z=D5so}7g#rHP?#_fny^B{0}_oblOYQE z$jJ=)caSZUNYW2R!#uhAi2Ph5M|a4kS5)(wSZ|TTM~t9{JdRPo4-^Rj#rSV3;vB;q zBTPI%dNezlEo4YKf3lcc;RYy|f!agz09^V2DfR_CYOud0AuMBHa8c~C5cWU%2YT1S A4gdfE delta 530 zcmZXQ%`XE{6vcn9X5QeEdj$&k-5MGGSqMm;>n4C6kA zf?>jEk}1RV<@%{JW0<{cR!cqfDuS)Udi{88_xPlKFfN6FIZ6R#3vT1W6nV`~nTa;TD3TY;omcOE$N=~=jLOoa^eS$hBmG}zD$X%o=B~P`~?i$s^ z@OioIM3f%U*QAT)hVB>4UW?>wOdSk)kYsiw6d_5-csYwo7lEAj;_GSMwS?xlWyCo+&$fLhR zqzySkzmgBaLN;rA4E*L*i-UpXFoV~`zs5NCI9*TZKP#Q|Y+IK^YQtunkDU&F0~w=6 A-v9sr diff --git a/regression/strings/java_index_of/test_index_of.java b/regression/strings/java_index_of/test_index_of.java index f22257d5a27..16c928e957c 100644 --- a/regression/strings/java_index_of/test_index_of.java +++ b/regression/strings/java_index_of/test_index_of.java @@ -6,6 +6,8 @@ public static void main(String[] argv) { int i = s.indexOf(c); int j = s.lastIndexOf('o'); int k = s.indexOf(c,5); + int l = s.lastIndexOf(c,5); + if(argv.length == 1){ assert(i == 4); assert(i != 4); @@ -14,9 +16,13 @@ else if(argv.length == 2){ assert(j == 7); assert(j != 7); } - else { + else if(argv.length == 3){ assert(k == 7); assert(k != 7); } + else if(argv.length == 4){ + assert(l == 4); + assert(l != 4); + } } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 948ada686fe..d21d9ebab0d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -178,7 +178,11 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.String.indexOf:(II)I") ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strindexof"); - } else if(function_id == irep_idt("java::java.lang.String.lastIndexOf:(I)I")) { + } else if(function_id == irep_idt + ("java::java.lang.String.lastIndexOf:(I)I") + || function_id == irep_idt + ("java::java.lang.String.lastIndexOf:(II)I") + ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlastindexof"); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat_func"); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 3cf3a8acf10..a8e12d75880 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -209,7 +209,7 @@ bvt string_refinementt::convert_function_application( } else if (is_string_index_of_func(id)) { return convert_bv(convert_string_index_of(expr)); } else if (is_string_last_index_of_func(id)) { - return convert_string_last_index_of(expr); + return convert_bv(convert_string_last_index_of(expr)); } else if (is_string_parse_int_func(id)) { return convert_bv(convert_string_parse_int(expr)); } @@ -685,34 +685,48 @@ exprt string_refinementt::convert_string_index_of( return convert_string_index_of(str,c,from_index); } -bvt string_refinementt::convert_string_last_index_of( +exprt string_refinementt::convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index) { + symbol_exprt index = fresh_index("last_index_of"); + symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); + + // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) + // && forall n. i <= n <= from_index => s[n] != c + + exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); + string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); + + symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); + + symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,from_index_plus_one)); + + return index; + +} + +exprt string_refinementt::convert_string_last_index_of( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string last index of? - - symbol_exprt index = fresh_index("last_index_of"); - symbol_exprt contains = fresh_boolean("contains_in_index_of"); + assert(f.type() == index_type); string_exprt str = make_string(args[0]); exprt c = args[1]; + exprt from_index; + if(!(c.type() == char_type || c.type() == java_char_type)){ debug() << "warning: argument to string_index_of does not have char type: " << c.type().pretty() << eom; c = typecast_exprt(c,java_char_type); } - string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),equal_exprt(str[index],c))); - - symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),str.length())); - - symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,str.length())); + if(args.size() == 2) from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); + else if (args.size() == 3) from_index = args[2]; + else assert(false); - bvt bv = convert_bv(index); - return bv; + return convert_string_last_index_of(str,c,from_index); } bvt string_refinementt::convert_char_literal( diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 18761f665c3..a4edd0f5af3 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -64,7 +64,8 @@ class string_refinementt: public bv_refinementt bvt convert_string_contains(const function_application_exprt &f); exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); exprt convert_string_index_of(const function_application_exprt &f); - bvt convert_string_last_index_of(const function_application_exprt &f); + exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt convert_string_last_index_of(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); exprt convert_string_parse_int(const function_application_exprt &f); From 81778997b2285f9703e28193c6ea5ead195f73aa Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 11:25:36 +0100 Subject: [PATCH 116/221] tests for indexOf and lastIndexOf with fromIndex argument --- regression/strings/java_index_of/test.desc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index 70baa6c488a..25e14e2d024 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -3,12 +3,12 @@ test_index_of.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_index_of.java line 10: SUCCESS$ -^\[assertion.2\] assertion at file test_index_of.java line 11: FAILURE$ -^\[assertion.3\] assertion at file test_index_of.java line 14: SUCCESS$ -^\[assertion.4\] assertion at file test_index_of.java line 15: FAILURE$ -^\[assertion.5\] assertion at file test_index_of.java line 18: SUCCESS$ -^\[assertion.6\] assertion at file test_index_of.java line 19: FAILURE$ +^\[assertion.1\] assertion at file test_index_of.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_index_of.java line 13: FAILURE$ +^\[assertion.3\] assertion at file test_index_of.java line 16: SUCCESS$ +^\[assertion.4\] assertion at file test_index_of.java line 17: FAILURE$ +^\[assertion.5\] assertion at file test_index_of.java line 20: SUCCESS$ +^\[assertion.6\] assertion at file test_index_of.java line 21: FAILURE$ ^\[assertion.7\] assertion at file test_index_of.java line 24: SUCCESS$ ^\[assertion.8\] assertion at file test_index_of.java line 25: FAILURE$ -- From 2ac64a24468ba613114cd055cc2aba63d748368a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 12:05:21 +0100 Subject: [PATCH 117/221] adding startsWith with toffset argument --- regression/strings/java_prefix/test.desc | 6 ++- .../strings/java_prefix/test_prefix.class | Bin 788 -> 933 bytes .../strings/java_prefix/test_prefix.java | 12 ++++- src/goto-programs/pass_preprocess.cpp | 6 ++- src/solvers/refinement/string_refinement.cpp | 49 ++++++++++-------- src/solvers/refinement/string_refinement.h | 3 +- 6 files changed, 48 insertions(+), 28 deletions(-) diff --git a/regression/strings/java_prefix/test.desc b/regression/strings/java_prefix/test.desc index fc97a77bd89..b234bba1788 100644 --- a/regression/strings/java_prefix/test.desc +++ b/regression/strings/java_prefix/test.desc @@ -3,6 +3,8 @@ test_prefix.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_prefix.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_prefix.java line 13: FAILURE$ +^\[assertion.1\] assertion at file test_prefix.java line 14: SUCCESS$ +^\[assertion.2\] assertion at file test_prefix.java line 16: FAILURE$ +^\[assertion.3\] assertion at file test_prefix.java line 18: SUCCESS$ +^\[assertion.4\] assertion at file test_prefix.java line 20: FAILURE$ -- diff --git a/regression/strings/java_prefix/test_prefix.class b/regression/strings/java_prefix/test_prefix.class index 424d82bb9f38c3c8d4b9bc76668bd80bf7efb91e..6f5f4025932b51a8fdcec8d94d4d5032d883ee5c 100644 GIT binary patch delta 553 zcmYL_%WD%+6vlsdGBbBFc{EO)I6mU5v5%Ry@zpHUiWGzv;!3o%uCkD{5+X=&+ofGL z#ErA+rnpwI0RwUG|KUI2AE2HaiGj=c&b{9`_nhy0@1E$#KYo830e4vQnc=eLipNzS zi)$X&J?2bW^|)bhK1+cG&7x1vlrH(iB%0;kde>f&*522ZOu%gKXLTW9RpD&EY`0$v zZW_!};6`MsOkp= zSr1exGHsG&P{=HaXXREARDw=CKz%ZWgc9BHqasV0bCR3VU()Id9uBc~g3JKB5janh zz&%AjOqM0q?IiHznyowW$UY|gjNeMxt)x63lG_=O{~nK=W6DCLY=m~o`jl`d#8T*_ zRHuZV5T(%hKyE^qb*=Hb_bB#{tni>JKF1V!AeuKs?=w;SLezFdZ&yUT6FHG|Mc99& z$km+JT#%!bm=Hw~9vA<6vo{cu6jQYQ5j*n*e>!<$l=;<}!74m5eqI`HR{0CA C-crW^ delta 404 zcmYk1J4*vW6otRp>}K{AvnEEPapNn#5?4hLZG>0|);8h~5EOzo_Wl8zuvY2CS_K1& z+WS)k|AKmF!3PX;?mctvxo58RRet;J^YH~(XVs^`xF&X~`&dl4Ou9^&a@r$cM$_=| zjAYhlj(N>OclX?0l#%Xpl8YGZel+5UrouTm>U7Qo_Y8)#SPB`Sm~N?7J_%W7B|TBc z>APCn4`eNdK0zZq%3znBbCG%q9V1CUdpH=xRah*wTnC4 z9>usv@Pv2R$A8V3sAB)4jG>ho*3nYi_<{vou??sZl1SH= s0); + string_axioms.emplace_back(isprefix, str >= plus_exprt(prefix.length(),offset)); + // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] symbol_exprt qvar = string_exprt::fresh_symbol("QA_isprefix", index_type); string_axioms.push_back - (string_constraintt(isprefix, equal_exprt(s0[qvar],s1[qvar]) - ).forall(qvar,zero,s0.length())); + (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) + ).forall(qvar,zero,prefix.length())); symbol_exprt witness = fresh_index("witness_not_isprefix"); - // forall witness < s0.length. isprefix => s0[witness] = s2[witness] - - or_exprt s0_notpref_s1(not_exprt(s1 >= s0), - and_exprt(is_positive(witness), - and_exprt(s0 > witness, - notequal_exprt(s0[witness],s1[witness])))); + or_exprt s0_notpref_s1(not_exprt(str >= plus_exprt(prefix.length(),offset)), + and_exprt + (str >= plus_exprt(prefix.length(),offset), + and_exprt(binary_relation_exprt(witness,ID_ge,zero), + and_exprt(prefix > witness, + notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); + return isprefix; +} + +exprt string_refinementt::convert_string_is_prefix +(const function_application_exprt &f, bool swap_arguments) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + string_exprt s0 = make_string(args[swap_arguments?1:0]); + string_exprt s1 = make_string(args[swap_arguments?0:1]); + exprt offset; + if(args.size() == 2) offset = zero; + else if (args.size() == 3) offset = args[2]; - return convert_bv(tc_isprefix); + return typecast_exprt(convert_string_is_prefix(s0,s1,offset),f.type()); } exprt string_refinementt::convert_string_is_empty diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index a4edd0f5af3..5c2c1cc1f5d 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -59,7 +59,8 @@ class string_refinementt: public bv_refinementt exprt convert_string_equals_ignore_case(const function_application_exprt &f); exprt convert_string_is_empty(const function_application_exprt &f); bvt convert_string_length(const function_application_exprt &f); - bvt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + exprt convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_contains(const function_application_exprt &f); exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); From c1691c353b85b6051b5d849e4c91b9ded4165978 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 14:07:34 +0100 Subject: [PATCH 118/221] adding String.replace(CC) --- regression/strings/java_replace/test.desc | 8 ++++++ .../strings/java_replace/test_replace.class | Bin 0 -> 904 bytes .../strings/java_replace/test_replace.java | 10 +++++++ src/goto-programs/pass_preprocess.cpp | 2 ++ src/solvers/refinement/string_expr.cpp | 25 ++++++++++++++++++ src/solvers/refinement/string_expr.h | 2 ++ src/solvers/refinement/string_functions.cpp | 8 ++++++ src/solvers/refinement/string_functions.h | 14 +++++----- src/solvers/refinement/string_refinement.cpp | 12 +++++++++ src/solvers/refinement/string_refinement.h | 1 + 10 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 regression/strings/java_replace/test.desc create mode 100644 regression/strings/java_replace/test_replace.class create mode 100644 regression/strings/java_replace/test_replace.java diff --git a/regression/strings/java_replace/test.desc b/regression/strings/java_replace/test.desc new file mode 100644 index 00000000000..26c858138c2 --- /dev/null +++ b/regression/strings/java_replace/test.desc @@ -0,0 +1,8 @@ +CORE +test_index_of.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_replace.java line 6: SUCCESS$ +^\[assertion.2\] assertion at file test_replace.java line 8: FAILURE$ +-- diff --git a/regression/strings/java_replace/test_replace.class b/regression/strings/java_replace/test_replace.class new file mode 100644 index 0000000000000000000000000000000000000000..c795826dc15e95c6e64931bc9afb74e3617f8687 GIT binary patch literal 904 zcmZuvYi|-k6g|UhV7mx~wqg|ptqK&uTI-9(*r28+R8258tsl$+lV~aL$K@!l z$iouHRRu9*W4MOv3JNH4loTwZ%yEMuy`(vguwC6UoyWSPwG7c=V7m;Fb=}n6hYZ0& z@ijxJZgm7hqM@7Oxz}w8`;|HadBk zR#8#KO%+MZj-y^~+Z#n!aEl=`0ogd}`H5{?Hpi-p+gRhcqv9?q^n98K$2}GI@!$lF z7p;BKb{Xai|L>ZQyO6@v>&1VQNMP~a(+uYn#t67pBnPIu{^+=(OI}!>EINYIt?EmX z*(I@s)~%75eupQo8F)`78RSu7qCnjs--%pDIJzx5$AXYqu15hfeHVH9ND2CAESZtA z(k=)l9ie%SPFY$Rt>MxT?5j+~Jk1gRlF_eQz**YM)KBy@Nb9ph1a?xvAwrGiq?Pmr z2yY!A(#Kpm#RrJ?F>{F6&JfDa1I&~MP^Y7xCsA20;FnvZfHR zP((%GH%c7mXk_Vr@tFUbPZUU{5g*`8A3XF0q2M<}Cg?}aNTe_V@kg@d^M3IQe*s01 Bzfk}H literal 0 HcmV?d00001 diff --git a/regression/strings/java_replace/test_replace.java b/regression/strings/java_replace/test_replace.java new file mode 100644 index 00000000000..342bf9afddc --- /dev/null +++ b/regression/strings/java_replace/test_replace.java @@ -0,0 +1,10 @@ +public class test_replace { + + public static void main(String[] argv) { + String s = new String("Hello World!"); + String t = s.replace('o','u'); + assert(t.equals("Hellu Wurld!")); + System.out.println(t); + assert(!t.equals("Hellu Wurld!")); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 0d2bcfd582e..a1d3a66df13 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -215,6 +215,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_lower_case"); } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_upper_case"); + } else if(function_id == irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_replace_func"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 35fe830cd0b..4cfb4c2fe32 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -158,6 +158,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_delete(expr,symbol_to_string,axioms); } else if (is_string_delete_char_at_func(id)) { return of_string_delete_char_at(expr,symbol_to_string,axioms); + } else if (is_string_replace_func(id)) { + return of_string_replace(expr,symbol_to_string,axioms); } else { std::string msg("string_exprt::of_function_application: unknown symbol :"); msg+=id.c_str(); @@ -684,6 +686,29 @@ void string_exprt::of_string_char_set } +void string_exprt::of_string_replace +(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt str = of_expr(args[0],symbol_to_string,axioms); + exprt oldChar = args[1]; + exprt newChar = args[2]; + + axioms.emplace_back(equal_exprt(length(), str.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("QA_replace", refined_string_typet::index_type()); + + axioms.push_back + (string_constraintt + (and_exprt + (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt((*this)[qvar],newChar)), + implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), + equal_exprt((*this)[qvar],str[qvar])) + ) + ).forall(qvar,index_zero,length())); + +} + void string_exprt::of_string_delete_char_at (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 8d73a74060c..d4dfd5a83df 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -96,10 +96,12 @@ class string_exprt : public struct_exprt { void of_string_delete (const string_exprt &str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); void of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_replace(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); + void of_int(const function_application_exprt &f, axiom_vect & axioms); void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); void of_long(const function_application_exprt &f, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 37f6b515920..253f1b8d326 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -41,8 +41,10 @@ Date: September 2016 #define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" #define string_of_float_func "__CPROVER_uninterpreted_string_of_float" #define string_of_double_func "__CPROVER_uninterpreted_string_of_double" +#define string_replace_func "__CPROVER_uninterpreted_string_replace_func" #define string_substring_func "__CPROVER_uninterpreted_substring" #define string_startswith_func "__CPROVER_uninterpreted_string_startswith" +#define string_to_char_array_func "__CPROVER_uninterpreted_string_to_char_array_func" #define string_parse_int_func "__CPROVER_uninterpreted_parse_int" #define string_trim_func "__CPROVER_uninterpreted_string_trim" #define string_to_lower_case_func "__CPROVER_uninterpreted_string_to_lower_case" @@ -175,6 +177,12 @@ bool is_string_delete_char_at_func(irep_idt id){ bool is_string_hash_code_func(irep_idt id){ return (starts_with(id2string(id),string_hash_code_func)); } +bool is_string_replace_func(irep_idt id){ + return (starts_with(id2string(id),string_replace_func)); +} +bool is_string_to_char_array_func(irep_idt id){ + return (starts_with(id2string(id),string_to_char_array_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 7661f3f3402..a0d4d52d68b 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -19,8 +19,6 @@ Date: September 2016 bool starts_with(std::string s, std::string t); bool is_string_literal_func(irep_idt id); bool is_char_literal_func(irep_idt id); -bool is_string_length_func(irep_idt id); -bool is_string_equal_func(irep_idt id); bool is_string_char_at_func(irep_idt id); bool is_string_char_set_func(irep_idt id); bool is_string_concat_func(irep_idt id); @@ -34,6 +32,7 @@ bool is_string_contains_func(irep_idt id); bool is_string_copy_func(irep_idt id); bool is_string_delete_func(irep_idt id); bool is_string_delete_char_at_func(irep_idt id); +bool is_string_equal_func(irep_idt id); bool is_string_equals_ignore_case_func(irep_idt id); bool is_string_empty_string_func(irep_idt id); bool is_string_endswith_func(irep_idt id); @@ -43,18 +42,21 @@ bool is_string_is_suffix_func(irep_idt id); bool is_string_is_empty_func(irep_idt id); bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); -bool is_string_parse_int_func(irep_idt id); +bool is_string_length_func(irep_idt id); bool is_string_of_int_func(irep_idt id); bool is_string_of_long_func(irep_idt id); bool is_string_of_bool_func(irep_idt id); bool is_string_of_float_func(irep_idt id); bool is_string_of_double_func(irep_idt id); -bool is_string_trim_func(irep_idt id); -bool is_string_to_lower_case_func(irep_idt id); -bool is_string_to_upper_case_func(irep_idt id); +bool is_string_parse_int_func(irep_idt id); +bool is_string_replace_func(irep_idt id); bool is_string_set_length_func(irep_idt id); bool is_string_startswith_func(irep_idt id); bool is_string_substring_func(irep_idt id); +bool is_string_to_char_array_func(irep_idt id); +bool is_string_to_lower_case_func(irep_idt id); +bool is_string_to_upper_case_func(irep_idt id); +bool is_string_trim_func(irep_idt id); bool is_string_value_of_func(irep_idt id); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 05a1c90bddf..9733fb15f25 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -212,6 +212,8 @@ bvt string_refinementt::convert_function_application( return convert_bv(convert_string_last_index_of(expr)); } else if (is_string_parse_int_func(id)) { return convert_bv(convert_string_parse_int(expr)); + } else if (is_string_to_char_array_func(id)) { + return convert_bv(convert_string_to_char_array(expr)); } } @@ -866,6 +868,16 @@ void string_refinementt::add_instantiations() } } +exprt string_refinementt::convert_string_to_char_array +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + + string_exprt str = make_string(args[0]); + + return str.content(); +} unsigned integer_of_expr(const constant_exprt & expr) { return integer2unsigned(string2integer(as_string(expr.get_value()),2)); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 5c2c1cc1f5d..d21020e970e 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -70,6 +70,7 @@ class string_refinementt: public bv_refinementt bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); exprt convert_string_parse_int(const function_application_exprt &f); + exprt convert_string_to_char_array(const function_application_exprt &f); private: // All constraints produced by the code From 7d1d5f90f91af681ea9beddc9f7f5284a46de204 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 14:14:12 +0100 Subject: [PATCH 119/221] tests for setLength and toCharArray --- regression/strings/java_replace/test.desc | 2 +- regression/strings/java_set_length/test.desc | 9 +++++++++ .../strings/java_set_length/test_set_length.class | Bin 0 -> 887 bytes .../strings/java_set_length/test_set_length.java | 12 ++++++++++++ src/goto-programs/pass_preprocess.cpp | 2 ++ 5 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 regression/strings/java_set_length/test.desc create mode 100644 regression/strings/java_set_length/test_set_length.class create mode 100644 regression/strings/java_set_length/test_set_length.java diff --git a/regression/strings/java_replace/test.desc b/regression/strings/java_replace/test.desc index 26c858138c2..a5b15efd737 100644 --- a/regression/strings/java_replace/test.desc +++ b/regression/strings/java_replace/test.desc @@ -1,5 +1,5 @@ CORE -test_index_of.class +test_replace.class --pass ^EXIT=10$ ^SIGNAL=0$ diff --git a/regression/strings/java_set_length/test.desc b/regression/strings/java_set_length/test.desc new file mode 100644 index 00000000000..59204c9c5a8 --- /dev/null +++ b/regression/strings/java_set_length/test.desc @@ -0,0 +1,9 @@ +CORE +test_set_length.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_set_length.java line 8: SUCCESS$ +^\[assertion.2\] assertion at file test_set_length.java line 9: SUCCESS$ +^\[assertion.3\] assertion at file test_set_length.java line 10: FAILURE$ +-- \ No newline at end of file diff --git a/regression/strings/java_set_length/test_set_length.class b/regression/strings/java_set_length/test_set_length.class new file mode 100644 index 0000000000000000000000000000000000000000..8836640967a8736f8ecdfc31c509c8f67e5cdc31 GIT binary patch literal 887 zcmZ`%TW=CU6#j+<29~8=xfL%|t5uhRMXmJ`8>6BoO{hL#G~h$Cz=UqyE@pS|$22iM z`m839*hJs`Pa4l`OHtI9GiSazm+w1gzW@C46~G$q=$J!^V=;lVIwCly%#t$alQ3{W z$1*N*T+)$5NnI{;SUSpB;ixcVm+c@BzH|m&@W=`5jw^Z$tj!SLa6CueW6-Sf3x;TY z&=U;v4aXBthkG62KUcx@uxC3SL&190*tOrd)}2NS`MeShE^xPf)jHPe^lrh!|y&0tP5pLKRcSN;JV z3T4P!|5l$QDUDDGP0HF-14+oiBr9i?|4w7j18Ms*c9pG^`lrCE1r zr?iot2pnJZj`h+a;$8!v2fk Date: Wed, 5 Oct 2016 16:27:13 +0100 Subject: [PATCH 120/221] adding String.valueOf for several classes --- src/goto-programs/pass_preprocess.cpp | 23 +++++++++- src/solvers/refinement/string_refinement.cpp | 44 ++++++++++++++++---- src/solvers/refinement/string_refinement.h | 2 + 3 files changed, 60 insertions(+), 9 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 3776519bfcb..5680b91e763 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -174,6 +174,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); + } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_hash_code_func"); } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I") || function_id == irep_idt("java::java.lang.String.indexOf:(II)I") ) { @@ -267,9 +269,28 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function_call(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_empty_string"); } else if(function_id == irep_idt - ("java::java.lang.Integer.toString:(I)Ljava/lang/String;")) { + ("java::java.lang.Integer.toString:(I)Ljava/lang/String;") + || function_id == irep_idt + ("java::java.lang.String.valueOf:(I)Ljava/lang/String;") + ) { make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_int"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_long"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:(F)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_float"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:(D)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_double"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_bool"); } else if(function_id == irep_idt ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it, diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9733fb15f25..a086b7a6b2a 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -79,7 +79,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) auto duration = std::chrono::duration_cast(t1-start_time).count(); - debug() << "string_refinementt::boolbv_set_equality_to_true time in ms: " + debug() << "string_refinementt::boolbv_set_equality_to_true " + << expr.pretty() << " at time(ms): " << (duration / 1000) << eom; if(!equality_propagation) return true; @@ -134,6 +135,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; + debug() << "convert symbol " << expr << eom; + if (refined_string_typet::is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; // this can happen because of boolbvt::convert_equality @@ -206,6 +209,8 @@ bvt string_refinementt::convert_function_application( return convert_string_is_suffix(expr,true); } else if (is_string_contains_func(id)) { return convert_string_contains(expr); + } else if (is_string_hash_code_func(id)) { + return convert_bv(convert_string_hash_code(expr)); } else if (is_string_index_of_func(id)) { return convert_bv(convert_string_index_of(expr)); } else if (is_string_last_index_of_func(id)) { @@ -646,6 +651,14 @@ symbol_exprt string_refinementt::fresh_boolean(const irep_idt &prefix){ return b; } +exprt string_refinementt::convert_string_hash_code(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + string_exprt str = make_string(args[0]); + exprt res = refined_string_typet::index_of_int(0); + throw "convert_string_hash_code: unimplemented"; + return res; +} exprt string_refinementt::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ symbol_exprt index = fresh_index("index_of"); @@ -669,6 +682,15 @@ exprt string_refinementt::convert_string_index_of(const string_exprt &str, const return index; } +exprt string_refinementt::convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index){ + symbol_exprt index = fresh_index("index_of"); + + debug() << "warning: string_refinementt::convert_string_index_of_string:" + << "not generating all requiered constraints" << eom; + string_axioms.push_back(string_constraintt(true_exprt()).exists(index,refined_string_typet::index_of_int(-1),str.length())); + return index; +} + exprt string_refinementt::convert_string_index_of( const function_application_exprt &f) @@ -679,17 +701,23 @@ exprt string_refinementt::convert_string_index_of( exprt c = args[1]; exprt from_index; - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); - } if(args.size() == 2) from_index = zero; else if (args.size() == 3) from_index = args[2]; else assert(false); - return convert_string_index_of(str,c,from_index); + if(refined_string_typet::is_java_string_type(c.type())){ + string_exprt sub = make_string(c); + return convert_string_index_of_string(str,sub,from_index); + } else { + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + return convert_string_index_of(str,c,from_index); + } + } exprt string_refinementt::convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index) { @@ -875,7 +903,7 @@ exprt string_refinementt::convert_string_to_char_array assert(args.size() == 1); string_exprt str = make_string(args[0]); - + debug() << "convert_string_to_char_array returns: " << str.content().pretty() << eom; return str.content(); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index d21020e970e..04a67a76a7d 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -63,7 +63,9 @@ class string_refinementt: public bv_refinementt exprt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); bvt convert_string_contains(const function_application_exprt &f); + exprt convert_string_hash_code(const function_application_exprt &f); exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); exprt convert_string_index_of(const function_application_exprt &f); exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); exprt convert_string_last_index_of(const function_application_exprt &f); From 827bda9714bc6ad4fcd94f03d1a7be124aba1884 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 5 Oct 2016 16:38:35 +0100 Subject: [PATCH 121/221] adding String.valueOf char --- src/goto-programs/pass_preprocess.cpp | 4 ++++ src/solvers/refinement/string_expr.cpp | 10 ++++++++++ src/solvers/refinement/string_expr.h | 1 + src/solvers/refinement/string_functions.cpp | 4 ++++ src/solvers/refinement/string_functions.h | 1 + 5 files changed, 20 insertions(+) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 5680b91e763..53115fcd805 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -291,6 +291,10 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu ("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_bool"); + } else if(function_id == irep_idt + ("java::java.lang.String.valueOf:(C)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_char_func"); } else if(function_id == irep_idt ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it, diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 4cfb4c2fe32..830e873eaca 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -152,6 +152,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_long(expr,axioms); } else if (is_string_of_bool_func(id)) { return of_bool(expr,axioms); + } else if (is_string_of_char_func(id)) { + return of_char(expr,axioms); } else if (is_string_set_length_func(id)) { return of_string_set_length(expr,symbol_to_string,axioms); } else if (is_string_delete_func(id)) { @@ -659,6 +661,14 @@ void string_exprt::of_int } } +void string_exprt::of_char +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_char(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); + +} + void string_exprt::of_char (const exprt &c, axiom_vect & axioms, bool is_c_string) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index d4dfd5a83df..4c9b668d4c2 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -112,6 +112,7 @@ class string_exprt : public struct_exprt { void of_double(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); + void of_char(const function_application_exprt &f, axiom_vect & axioms); void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); void of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 253f1b8d326..461e814cb1d 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -41,6 +41,7 @@ Date: September 2016 #define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" #define string_of_float_func "__CPROVER_uninterpreted_string_of_float" #define string_of_double_func "__CPROVER_uninterpreted_string_of_double" +#define string_of_char_func "__CPROVER_uninterpreted_string_of_char_func" #define string_replace_func "__CPROVER_uninterpreted_string_replace_func" #define string_substring_func "__CPROVER_uninterpreted_substring" #define string_startswith_func "__CPROVER_uninterpreted_string_startswith" @@ -147,6 +148,9 @@ bool is_string_of_float_func(irep_idt id){ bool is_string_of_double_func(irep_idt id){ return (starts_with(id2string(id),string_of_double_func)); } +bool is_string_of_char_func(irep_idt id){ + return (starts_with(id2string(id),string_of_char_func)); +} bool is_string_equals_ignore_case_func(irep_idt id){ return (starts_with(id2string(id),string_equals_ignore_case_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index a0d4d52d68b..09db7bb9363 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -48,6 +48,7 @@ bool is_string_of_long_func(irep_idt id); bool is_string_of_bool_func(irep_idt id); bool is_string_of_float_func(irep_idt id); bool is_string_of_double_func(irep_idt id); +bool is_string_of_char_func(irep_idt id); bool is_string_parse_int_func(irep_idt id); bool is_string_replace_func(irep_idt id); bool is_string_set_length_func(irep_idt id); From 7755cde09944edcfea5baba1026eea65e5c06a51 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 6 Oct 2016 09:10:09 +0100 Subject: [PATCH 122/221] adding String.setCharAt --- regression/strings/cprover-string-hack.h | 2 +- regression/strings/java_char_at/test.desc | 5 +++-- .../strings/java_char_at/test_char_at.class | Bin 695 -> 951 bytes .../strings/java_char_at/test_char_at.java | 12 ++++++++++-- src/goto-programs/pass_preprocess.cpp | 6 ++++++ src/solvers/refinement/string_expr.cpp | 2 +- src/solvers/refinement/string_functions.cpp | 2 +- 7 files changed, 22 insertions(+), 7 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index a3eda1cb151..08d9961bc3a 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -66,7 +66,7 @@ extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, extern __CPROVER_bool __CPROVER_uninterpreted_strcontains(__CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_strindexof(__CPROVER_string str, __CPROVER_char c); extern int __CPROVER_uninterpreted_strlastindexof(__CPROVER_string str, __CPROVER_char c); -extern __CPROVER_string __CPROVER_uninterpreted_char_set(__CPROVER_string str, int pos, __CPROVER_char c); +extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func(__CPROVER_string str, int pos, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_copy(__CPROVER_string str); extern unsigned __CPROVER_uninterpreted_parse_int(__CPROVER_string str); extern __CPROVER_string __CPROVER_uninterpreted_string_of_int(unsigned i); diff --git a/regression/strings/java_char_at/test.desc b/regression/strings/java_char_at/test.desc index f09a7fea678..babcc395bcf 100644 --- a/regression/strings/java_char_at/test.desc +++ b/regression/strings/java_char_at/test.desc @@ -3,6 +3,7 @@ test_char_at.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_char_at.java line 6: SUCCESS$ -^\[assertion.2\] assertion at file test_char_at.java line 7: FAILURE$ +^\[assertion.1\] assertion at file test_char_at.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_char_at.java line 13: FAILURE$ +^\[assertion.3\] assertion at file test_char_at.java line 15: SUCCESS$ -- diff --git a/regression/strings/java_char_at/test_char_at.class b/regression/strings/java_char_at/test_char_at.class index 7304eaf2a383c5b42c0af480874f537c50c9e795..7d1f07fad7d5f729b218f33c4dedc06c27665e76 100644 GIT binary patch literal 951 zcmZuvT~pIQ6g}IfO-NIkwtTc&v><5OTJQ_MTIHkS$V|nDIy%J%CbT;k3=JfyKZX~4 z^I4r~XJiJSeDOyy-YorZ;5kp=mAddfN0n?)sL~@t#?pxoPt@16yZ^R;`ZZ zKV=9Tg*OaR&1rLnMBVD}weHR)cV7!IC3Z}!!!TyNt8beh%{klbY|S-%*XnFl#Km~S zH(MWGn!5u$X(pKrO0{L5@~aJ}>$doFORyzo71D66DR$SL{1M+e}{s0dt z_NO=*k2E|+y?7*j!uVIH`&iED&H<{2h&B7reiV-)LB`1Gy9byGG6VETDHZQw zcptGKEM$cSvS#VEgG8u^Kqrw|$jC#%3`I(mTY!cY#L=X#cL{Nc(8CBHV?oAcCL@;} rBlN^s_w$1`fm9la9`t?4(q~BFZ&1%`2382J2tx5iVc3;{q^rLH7FffW delta 389 zcmYk2J4*vW6otRpM<%=3#LdGPV-jEMBM~eVQHy{-KoHARA&6k-Yy13$5Ny&|TC0!+ z16u1(5)|()L~YKwbLQT2&rGBvd;jD6eSEV}6Ua>-?x z70v44G*s2W`?i^5X7Cwga|9l1tb2H5hbO903eRuD?%74}rrQfO8y=f9hj*$yY#KX# zM|OeoD{;G2CJJ#9^yO3+R>F2GLOsTf Date: Thu, 6 Oct 2016 11:29:37 +0100 Subject: [PATCH 123/221] adding String.subSequence --- regression/strings/cprover-string-hack.h | 2 +- regression/strings/java_substring/test.desc | 6 ++++-- .../java_substring/test_substring.class | Bin 814 -> 1051 bytes .../strings/java_substring/test_substring.java | 13 ++++++++++++- src/goto-programs/pass_preprocess.cpp | 5 ++++- src/solvers/refinement/refined_string_type.cpp | 13 +++++++++++++ src/solvers/refinement/refined_string_type.h | 6 +++++- src/solvers/refinement/string_refinement.cpp | 12 +++++++++--- 8 files changed, 48 insertions(+), 9 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 08d9961bc3a..5ee11a69152 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -43,7 +43,7 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_strlastindexof(s, c) /* returns a new string obtained from s by setting s[p] = c */ -#define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_char_set(s, p, c) +#define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_string_char_set_func(s, p, c) #define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy(s) diff --git a/regression/strings/java_substring/test.desc b/regression/strings/java_substring/test.desc index a9384d0f25c..78a9bcca9cb 100644 --- a/regression/strings/java_substring/test.desc +++ b/regression/strings/java_substring/test.desc @@ -3,6 +3,8 @@ test_substring.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_substring.java line 11: SUCCESS$ -^\[assertion.2\] assertion at file test_substring.java line 12: FAILURE$ +^\[assertion.1\] assertion at file test_substring.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_substring.java line 13: FAILURE$ +^\[assertion.3\] assertion at file test_substring.java line 20: SUCCESS$ +^\[assertion.4\] assertion at file test_substring.java line 21: FAILURE$ -- diff --git a/regression/strings/java_substring/test_substring.class b/regression/strings/java_substring/test_substring.class index 943a33264e8927e2df8381bf442bf46daba061ec..e6532aca43e8ec0108d5f9108ccd271907039b70 100644 GIT binary patch literal 1051 zcmbVK-%ry}7(I9EkI@wv%poEuD9U~yQxG(P5D+xZfSSyZfDfkI8Yqqq+fLv7BYfmV z5{*2o$%vZZyML5;ZjlYtCzIxDd+#~tyXSoO$Iq_^048wDfQfzs1Gpf|MOg;hU|>kc zB?H>g-sL!kF{tB;fvXtNkrqe}TfT35fm3t+MaQ>FRl6b})&#T}$8~~PfoM9jBA_hP zDz-r9lH=MB>suw;dm_Qy*s>f~peOxwY14XX<*Syvo-YQT@XW85{7_^}s+#CTftPrCe+m_d~T9)xMxDg8$T$W+I`P2Vqrsc$I1Bv=l=h ztqt;T1aV$66L*--3iDZIHWt&_pyh4yUJ?D85xhYPAIM5kbq?ww37U=`9cTFn!3YnD zj2tbo@gZ)v0KH9sAb<)noNG>CGK?DNPQqv)z5`v^gA)A=wdLS=9J0HLNc)@|T3=}J F{4e6h&lUgx delta 435 zcmYL_O-lk%6o%hBj&om-IzRu*ztvyjKS1seqmBd`Qg*R{J^>893dl&Y>!*N9Mzc5?Sb0GsjZfe3q2@$7f1fHvVR{;E8(;qUa3+Y zWu?(UBF$gO(l5tOktkKdoY6PQsVtNs8=Ay~#3YvxWE%2JutkB6sXyYK5DiEqq4!`s cLaHxNBky@c{|SEi1NSJDSS5JnbO@OG0m7Ozd;kCd diff --git a/regression/strings/java_substring/test_substring.java b/regression/strings/java_substring/test_substring.java index b14cd7ec198..8a2ac883cca 100644 --- a/regression/strings/java_substring/test_substring.java +++ b/regression/strings/java_substring/test_substring.java @@ -3,7 +3,8 @@ public class test_substring { public static void main(String[] argv) { if(argv.length > 1) { String t = argv[1]; - if(t.length() > 5) { + + if(t.length() == 6) { String u = t.substring(2,4); char c = u.charAt(1); char d = t.charAt(3); @@ -11,6 +12,16 @@ public static void main(String[] argv) { assert(c == d); assert(c == e); } + else if(t.length() == 5){ + CharSequence u = t.subSequence(2,4); + char c = u.charAt(1); + char d = t.charAt(3); + char e = t.charAt(4); + assert(c == d); + assert(c == e); + } + + } } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index ed454e5ba33..cd044bcfece 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -172,6 +172,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu if(function_id == irep_idt("java::java.lang.String.charAt:(I)C") || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") + || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { @@ -209,7 +210,9 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")) { + || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") + ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_trim"); diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp index d202fbcd567..8f739ea2520 100644 --- a/src/solvers/refinement/refined_string_type.cpp +++ b/src/solvers/refinement/refined_string_type.cpp @@ -61,3 +61,16 @@ bool refined_string_typet::is_java_string_builder_type(const typet &type) } else return false; } +bool refined_string_typet::is_java_char_sequence_type(const typet &type) +{ + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_struct) { + irep_idt tag = to_struct_type(subtype).get_tag(); + return (tag == irep_idt("java.lang.CharSequence")); + } + else return false; + } else return false; +} + diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index 66ecc69414a..3226587d912 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -46,6 +46,8 @@ class refined_string_typet : public struct_typet { static bool is_java_string_builder_type(const typet & type); + static bool is_java_char_sequence_type(const typet & type); + static inline unsignedbv_typet get_char_type(const exprt & expr) { if(is_c_string_type(expr.type())) return char_type(); else return java_char_type(); @@ -54,7 +56,9 @@ class refined_string_typet : public struct_typet { static inline bool is_unrefined_string_type(const typet & type) { return (is_c_string_type(type) || is_java_string_type(type) - || is_java_string_builder_type(type)); } + || is_java_string_builder_type(type) + || is_java_char_sequence_type(type) + ); } static inline bool is_unrefined_string(const exprt & expr) { return (is_unrefined_string_type(expr.type())); } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index a086b7a6b2a..2f00c9b459c 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -80,7 +80,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) auto duration = std::chrono::duration_cast(t1-start_time).count(); debug() << "string_refinementt::boolbv_set_equality_to_true " - << expr.pretty() << " at time(ms): " + //<< expr.pretty() + << " at time(ms): " << (duration / 1000) << eom; if(!equality_propagation) return true; @@ -88,7 +89,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) const typet &type=ns.follow(expr.lhs().type()); if(expr.lhs().id()==ID_symbol && - type==ns.follow(expr.rhs().type()) && + // We can have affectation of string from StringBuilder or CharSequence + //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { if(refined_string_typet::is_unrefined_string_type(type)) { @@ -135,7 +137,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if(identifier.empty()) throw "string_refinementt::convert_symbol got empty identifier"; - debug() << "convert symbol " << expr << eom; + //debug() << "convert symbol " << expr << eom; if (refined_string_typet::is_unrefined_string_type(type)) { debug() << "string_refinementt::convert_symbol of unrefined string" << eom; @@ -376,14 +378,18 @@ string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { + //debug() << "string_refinementt::make_string of " << pretty_short(sym) << eom + // << " --> " << pretty_short(str) << eom; if(str.id()==ID_symbol) assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); else assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; } string_exprt string_refinementt::make_string(const exprt & str) { + //debug() << "string_refinementt::make_string of " << pretty_short(str) << eom; if(str.id()==ID_symbol) return string_of_symbol(to_symbol_expr(str)); else From c6c0f692cbbdcaa9e06a3e7a011f990a9c736226 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 6 Oct 2016 13:14:12 +0100 Subject: [PATCH 124/221] adding StringBuilder.insert and tests --- .../strings/java_insert/test_insert.class | Bin 0 -> 1318 bytes .../strings/java_insert/test_insert.java | 19 ++++ .../strings/java_insert/test_insert1.class | Bin 0 -> 1035 bytes .../strings/java_insert/test_insert1.java | 23 ++++ src/goto-programs/pass_preprocess.cpp | 19 +++- src/solvers/refinement/string_expr.cpp | 106 ++++++++++++++++-- src/solvers/refinement/string_expr.h | 11 ++ src/solvers/refinement/string_functions.cpp | 28 +++++ src/solvers/refinement/string_functions.h | 9 +- 9 files changed, 206 insertions(+), 9 deletions(-) create mode 100644 regression/strings/java_insert/test_insert.class create mode 100644 regression/strings/java_insert/test_insert.java create mode 100644 regression/strings/java_insert/test_insert1.class create mode 100644 regression/strings/java_insert/test_insert1.java diff --git a/regression/strings/java_insert/test_insert.class b/regression/strings/java_insert/test_insert.class new file mode 100644 index 0000000000000000000000000000000000000000..5fa0f4250618e78cf024e8037a9213b4fe087127 GIT binary patch literal 1318 zcmah|TTc^F5dKct?J3I^N=t!?C@4ycN(BU!R^+bbt|c1q!7S|wENolcZcPl2`X}TM z_$($%B8k5HZ~O!5oE9jzNR!UY&U|w@-Gvy^0&hg^&zG~L5~!7 zq_``^Jt=y9h)aE6ioRO(V?e_L4AvryAs-%Uc!b9s!x}>9=16Er;t9tHL#WFr7KQDY zg?w?+EE;Q;$TF~125-{Ln+`#0qOn&D%0wY67#ilxyjUpZ)`Yz*!4$|DW}cxr`ets^ zcyGilBflO`JGPl$Psl`n+A%U)^Tu`=&+(Lw!ZFI=OJ=OY7FxPcvNK}Zlm!EhC^~P= zyd0}nmeg?tZ451E%a4~#D=TaUbwgNILBhs#jAKHINhzkJn5H8bYZ+-i)A1ZBju{=Z znB$n&u^@9=5g{rz1i>7;B>MUX;`FDQG^mb6EHSiJyN?|)Hf7rdYF~F^V2&3$ULsA$ zs3t6~ZHkOT9WJ2g6tF@YLpXXdm);614DHcWDs~QYNJyd_pSUDGb4h&lfAQXE>Rk84 z{}Oyo;plKp(epqW`2=6-4@F1h=-LV;Vl7_@vR{qPFZ%U1-t>*16EhaN!^3d#I0a7Y%y|>>?cD!A2Ls zUDO>Qw6c$;pQrqvtA07Dr#$Hh8pu}YSSmQpT}QH>=8VwnozT!jo_^>^z>i6a%o0A0 z0JhMGj|ifJvRmN!OAgM_$rQ#oZgAX`ZXddinHnrp0t7<{yJ+48SH3{0`G!Dsm?PR` QQ57Els3i9meRy#D9{|H4+W-In literal 0 HcmV?d00001 diff --git a/regression/strings/java_insert/test_insert.java b/regression/strings/java_insert/test_insert.java new file mode 100644 index 00000000000..6871a51716c --- /dev/null +++ b/regression/strings/java_insert/test_insert.java @@ -0,0 +1,19 @@ +public class test_insert { + + public static void main(String[] argv) { + int i = 123; + long j = 123; + char c = '/'; + boolean b = true; + StringBuilder sb = new StringBuilder("hello"); + sb.insert(2,i); + sb.insert(2,c); + sb.insert(2,j); + sb.insert(2,b); + sb.insert(2,"abc"); + String s = sb.toString(); + System.out.println(s); + assert(s.equals("heabctrue123/123llo")); + assert(!s.equals("heabctrue123/123llo")); + } +} diff --git a/regression/strings/java_insert/test_insert1.class b/regression/strings/java_insert/test_insert1.class new file mode 100644 index 0000000000000000000000000000000000000000..80091936cea37ba88b8d3f67bddf5ea8683f7b2b GIT binary patch literal 1035 zcmZuw+fEZv6kVsx%xR}n=!F6mQ9;xem2wf(wsMC^f|sO513s9cJ%PdL49-kV41dC# zPdbd2DB1aUkF9GfkY zgTOuE>dsyU65@=!@)ti4HF`z2P9oDSTFcG9rUwd$Mwm6akZSrlzsr9lAgI#;_0t9hsWX$*!7SbAcJc(m(Z_tHB94be6Q4v(0n{Uttiv#5tQ|$dI+tc zWi++F0sbzdH4rZF14J^s0sR2ceWWuyX*3YqNAw7t>xbz2Ez^aX=|-T_T%iOiI3V literal 0 HcmV?d00001 diff --git a/regression/strings/java_insert/test_insert1.java b/regression/strings/java_insert/test_insert1.java new file mode 100644 index 00000000000..54e754302c5 --- /dev/null +++ b/regression/strings/java_insert/test_insert1.java @@ -0,0 +1,23 @@ +public class test_insert1 { + + public static void main(String[] argv) { + int i = 123; + long j = 123; + char c = '/'; + boolean b = true; + StringBuilder sb = new StringBuilder("hello"); + sb.insert(2,i); + + /* + sb.insert(2,c); + sb.insert(2,j); + sb.insert(2,b); + sb.insert(2,"abc"); + */ + String s = sb.toString(); + System.out.println(s); + assert(s.equals("he123llo")); + //assert(s.equals("heabctrue123/123llo")); + //assert(!s.equals("heabctrue123/123llo")); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index cd044bcfece..d8b090631ad 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -254,6 +254,21 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt ("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_char_at_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_int_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_long_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_char_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ) { + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_bool_func",string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.setCharAt:(IC)V")) { // warning: this should return void type @@ -264,7 +279,9 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt - ("java::java.lang.String.:(Ljava/lang/String;)V")) { + ("java::java.lang.String.:(Ljava/lang/String;)V") + || function_id == irep_idt + ("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")) { make_string_function_call(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_copy"); } else if(function_id == irep_idt diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index dc40d3ff3a6..7320cf25aa7 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -126,6 +126,20 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_concat_double(expr,symbol_to_string,axioms); } else if (is_string_concat_float_func(id)) { return of_string_concat_float(expr,symbol_to_string,axioms); + } else if (is_string_insert_func(id)) { + return of_string_insert(expr,symbol_to_string,axioms); + } else if (is_string_insert_int_func(id)) { + return of_string_insert_int(expr,symbol_to_string,axioms); + } else if (is_string_insert_long_func(id)) { + return of_string_insert_long(expr,symbol_to_string,axioms); + } else if (is_string_insert_bool_func(id)) { + return of_string_insert_bool(expr,symbol_to_string,axioms); + } else if (is_string_insert_char_func(id)) { + return of_string_insert_char(expr,symbol_to_string,axioms); + } else if (is_string_insert_double_func(id)) { + return of_string_insert_double(expr,symbol_to_string,axioms); + } else if (is_string_insert_float_func(id)) { + return of_string_insert_float(expr,symbol_to_string,axioms); } else if (is_string_substring_func(id)) { return of_string_substring(expr,symbol_to_string,axioms); } else if (is_string_trim_func(id)) { @@ -764,8 +778,8 @@ void string_exprt::of_string_concat_int(const function_application_exprt &f, std const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[1])); - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[1].type()),10); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); of_string_concat(s1,s2,symbol_to_string,axioms); } @@ -773,9 +787,9 @@ void string_exprt::of_string_concat_long(const function_application_exprt &f, st const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[1])); + string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[1].type()),30); + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); of_string_concat(s1,s2,symbol_to_string,axioms); } @@ -783,7 +797,7 @@ void string_exprt::of_string_concat_bool(const function_application_exprt &f, st const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[1])); + string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); of_string_concat(s1,s2,symbol_to_string,axioms); } @@ -792,7 +806,7 @@ void string_exprt::of_string_concat_char(const function_application_exprt &f, st const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[1])); + string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); of_string_concat(s1,s2,symbol_to_string,axioms); } @@ -801,7 +815,7 @@ void string_exprt::of_string_concat_double(const function_application_exprt &f, const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[1])); + string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); of_string_concat(s1,s2,symbol_to_string,axioms); } @@ -815,3 +829,81 @@ void string_exprt::of_string_concat_float(const function_application_exprt &f, s of_string_concat(s1,s2,symbol_to_string,axioms); } +void string_exprt::of_string_insert(const string_exprt & s1, const string_exprt & s2, + const exprt & offset, + std::map & symbol_to_string, + axiom_vect & axioms) +{ + assert(offset.type() == refined_string_typet::index_type()); + unsignedbv_typet char_type = refined_string_typet::get_char_type(s1); + string_exprt pref(char_type); + string_exprt suf(char_type); + string_exprt concat1(char_type); + pref.of_string_substring(s1,index_zero,offset,symbol_to_string,axioms); + suf.of_string_substring(s1,offset,s1.length(),symbol_to_string,axioms); + concat1.of_string_concat(pref,s2,symbol_to_string,axioms); + of_string_concat(concat1,suf,symbol_to_string,axioms); +} + + +void string_exprt::of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2 = string_exprt::of_expr(args[2],symbol_to_string,axioms); + of_string_insert(s1, s2, args[1],symbol_to_string, axioms); +} + +void string_exprt::of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[2])); + s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +void string_exprt::of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[2])); + s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +void string_exprt::of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_bool(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +void string_exprt::of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_char(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +void string_exprt::of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +void string_exprt::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 4c9b668d4c2..ac2fbc6aa25 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -87,6 +87,17 @@ class string_exprt : public struct_exprt { void of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + + // insert s2 in s1 at the given position + void of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset, std::map & symbol_to_string, axiom_vect & axioms); + void of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_substring(const string_exprt & str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index c43e412c51e..a28ca4787bc 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -30,6 +30,13 @@ Date: September 2016 #define string_equals_ignore_case_func "__CPROVER_uninterpreted_string_equals_ignore_case" #define string_hash_code_func "__CPROVER_uninterpreted_string_hash_code_func" #define string_index_of_func "__CPROVER_uninterpreted_strindexof" +#define string_insert_func "__CPROVER_uninterpreted_string_insert_func" +#define string_insert_int_func "__CPROVER_uninterpreted_string_insert_int_func" +#define string_insert_long_func "__CPROVER_uninterpreted_string_insert_long_func" +#define string_insert_bool_func "__CPROVER_uninterpreted_string_insert_bool_func" +#define string_insert_char_func "__CPROVER_uninterpreted_string_insert_char_func" +#define string_insert_float_func "__CPROVER_uninterpreted_string_insert_float_func" +#define string_insert_double_func "__CPROVER_uninterpreted_string_insert_double_func" #define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" #define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" #define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" @@ -187,6 +194,27 @@ bool is_string_replace_func(irep_idt id){ bool is_string_to_char_array_func(irep_idt id){ return (starts_with(id2string(id),string_to_char_array_func)); } +bool is_string_insert_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_func)); +} +bool is_string_insert_int_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_int_func)); +} +bool is_string_insert_long_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_long_func)); +} +bool is_string_insert_bool_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_bool_func)); +} +bool is_string_insert_char_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_char_func)); +} +bool is_string_insert_float_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_float_func)); +} +bool is_string_insert_double_func(irep_idt id){ + return (starts_with(id2string(id),string_insert_double_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 09db7bb9363..0a892d57ff1 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -37,10 +37,17 @@ bool is_string_equals_ignore_case_func(irep_idt id); bool is_string_empty_string_func(irep_idt id); bool is_string_endswith_func(irep_idt id); bool is_string_hash_code_func(irep_idt id); +bool is_string_index_of_func(irep_idt id); +bool is_string_insert_func(irep_idt id); +bool is_string_insert_int_func(irep_idt id); +bool is_string_insert_long_func(irep_idt id); +bool is_string_insert_bool_func(irep_idt id); +bool is_string_insert_char_func(irep_idt id); +bool is_string_insert_float_func(irep_idt id); +bool is_string_insert_double_func(irep_idt id); bool is_string_is_prefix_func(irep_idt id); bool is_string_is_suffix_func(irep_idt id); bool is_string_is_empty_func(irep_idt id); -bool is_string_index_of_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); bool is_string_length_func(irep_idt id); bool is_string_of_int_func(irep_idt id); From 4f7fc09540614c170e12a111d679ea6d286ee9a4 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 7 Oct 2016 14:22:23 +0100 Subject: [PATCH 125/221] unicode string litterals and codePointAt --- src/goto-programs/pass_preprocess.cpp | 6 ++ src/solvers/refinement/string_expr.cpp | 26 +++++- src/solvers/refinement/string_functions.cpp | 19 +++- src/solvers/refinement/string_functions.h | 4 + src/solvers/refinement/string_refinement.cpp | 81 +++++++++++++++- src/solvers/refinement/string_refinement.h | 9 ++ src/util/unicode.cpp | 98 ++++++++++++++------ src/util/unicode.h | 3 + 8 files changed, 209 insertions(+), 37 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index d8b090631ad..840a559c30f 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -175,8 +175,12 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") ) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); + } else if(function_id == irep_idt("java::java.lang.String.codePointAt:(I)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_at_func"); + } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_hash_code_func"); + } else if(function_id == irep_idt("java::java.lang.String.indexOf:(I)I") || function_id == irep_idt("java::java.lang.String.indexOf:(II)I") ) { @@ -301,6 +305,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu ) { make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_int"); + } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, @@ -321,6 +326,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu ("java::java.lang.String.valueOf:(C)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_char_func"); + } else if(function_id == irep_idt ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it, diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 7320cf25aa7..834cbeff979 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -185,6 +185,9 @@ void string_exprt::of_function_application(const function_application_exprt & ex throw "string_exprt::of_function_application: not a string function"; } +#include +#include + irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); @@ -192,16 +195,33 @@ irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ } void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ - for (std::size_t i = 0; i < sval.size(); ++i) { + + std::cout << "string_exprt::of_string_constant " << std::endl + << "original string: " << sval << std::endl; + + std::string str = sval.c_str(); + for (std::size_t i = 0; i < str.size(); ++i) { + std::cout << "utf8[" << i << "] = " << std::hex << (unsigned)((unsigned char)str[i]) << std::endl; + } + + // should only do this for java + std::wstring utf16 = utf8_to_utf16(str); + // warning: endianness should be used as a flag when using this function + + for (std::size_t i = 0; i < utf16.size(); ++i) { std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); constant_exprt idx(idx_binary, refined_string_typet::index_type()); - std::string sval_binary=integer2binary(unsigned(sval[i]), char_width); + // warning: this should disappear if utf8_to_utf16 takes into account endianness + wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); + std::cout << "utf16[" << i << "] = " << std::hex << (unsigned)big_endian << std::endl; + + std::string sval_binary=integer2binary((unsigned)big_endian, char_width); constant_exprt c(sval_binary,char_type); equal_exprt lemma(index_exprt(content(), idx), c); axioms.emplace_back(lemma,true); } - std::string s_length_binary = integer2binary(unsigned(sval.size()),STRING_SOLVER_INDEX_WIDTH); + std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); axioms.emplace_back(equal_exprt(length(),s_length)); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index a28ca4787bc..4ac6c634217 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -13,6 +13,10 @@ Date: September 2016 #define char_literal_func "__CPROVER_uninterpreted_char_literal" #define string_equal_func "__CPROVER_uninterpreted_string_equal_func" #define string_char_at_func "__CPROVER_uninterpreted_char_at" +#define string_code_point_at_func "__CPROVER_uninterpreted_string_code_point_at_func" +#define string_code_point_before_func "__CPROVER_uninterpreted_string_code_point_before_func" +#define string_code_point_count_func "__CPROVER_uninterpreted_string_code_point_count_func" +#define string_code_point_offset_by_code_point_func "__CPROVER_uninterpreted_string_offset_by_code_point_func" #define string_concat_func "__CPROVER_uninterpreted_strcat_func" #define string_concat_int_func "__CPROVER_uninterpreted_strcat_int_func" #define string_concat_long_func "__CPROVER_uninterpreted_strcat_long_func" @@ -215,6 +219,15 @@ bool is_string_insert_float_func(irep_idt id){ bool is_string_insert_double_func(irep_idt id){ return (starts_with(id2string(id),string_insert_double_func)); } - - - +bool is_string_code_point_at_func(irep_idt id){ + return (starts_with(id2string(id),string_code_point_at_func)); +} +bool is_string_code_point_before_func(irep_idt id){ + return (starts_with(id2string(id),string_code_point_before_func)); +} +bool is_string_code_point_count_func(irep_idt id){ + return (starts_with(id2string(id),string_code_point_count_func)); +} +bool is_string_code_point_offset_by_code_point_func(irep_idt id){ + return (starts_with(id2string(id),string_code_point_offset_by_code_point_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 0a892d57ff1..d5a0191e297 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -21,6 +21,10 @@ bool is_string_literal_func(irep_idt id); bool is_char_literal_func(irep_idt id); bool is_string_char_at_func(irep_idt id); bool is_string_char_set_func(irep_idt id); +bool is_string_code_point_at_func(irep_idt id); +bool is_string_code_point_before_func(irep_idt id); +bool is_string_code_point_count_func(irep_idt id); +bool is_string_code_point_offset_by_code_point_func(irep_idt id); bool is_string_concat_func(irep_idt id); bool is_string_concat_int_func(irep_idt id); bool is_string_concat_long_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 2f00c9b459c..71f54baf7c9 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -221,6 +221,14 @@ bvt string_refinementt::convert_function_application( return convert_bv(convert_string_parse_int(expr)); } else if (is_string_to_char_array_func(id)) { return convert_bv(convert_string_to_char_array(expr)); + } else if (is_string_code_point_at_func(id)) { + return convert_bv(convert_string_code_point_at(expr)); + } else if (is_string_code_point_before_func(id)) { + return convert_bv(convert_string_code_point_before(expr)); + } else if (is_string_code_point_count_func(id)) { + return convert_bv(convert_string_code_point_count(expr)); + } else if (is_string_code_point_offset_by_code_point_func(id)) { + return convert_bv(convert_string_offset_by_code_point(expr)); } } @@ -384,7 +392,7 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); else assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; + //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; } string_exprt string_refinementt::make_string(const exprt & str) @@ -804,8 +812,6 @@ bvt string_refinementt::convert_string_char_at( const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); //string_char_at expects 2 arguments string_exprt str = make_string(args[0]); - debug() << "in convert_string_char_at: we add the index to the" - << " index set" << eom; if(f.type() == char_type) { symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); @@ -819,6 +825,8 @@ bvt string_refinementt::convert_string_char_at( } } + + constant_exprt string_refinementt::constant_of_nat(int i,typet t) { return constant_exprt(integer2binary(i, boolbv_width(t)), t); } @@ -871,6 +879,73 @@ exprt string_refinementt::convert_string_parse_int return i; } + +exprt string_refinementt::is_high_surrogate(const exprt & chr) { + return and_exprt + (binary_relation_exprt(chr,ID_ge,constant_of_nat(0xD800,refined_string_typet::java_char_type())), + binary_relation_exprt(chr,ID_le,constant_of_nat(0xDBFF,refined_string_typet::java_char_type()))); +} +exprt string_refinementt::is_low_surrogate(const exprt & chr) { + return and_exprt + (binary_relation_exprt(chr,ID_ge,constant_of_nat(0xDC00,refined_string_typet::java_char_type())), + binary_relation_exprt(chr,ID_le,constant_of_nat(0xDFFF,refined_string_typet::java_char_type()))); +} + +exprt string_refinementt::convert_string_code_point_at( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + typet return_type = f.type(); + string_exprt str = make_string(args[0]); + symbol_exprt result = string_exprt::fresh_symbol("char",return_type); + symbol_exprt low = fresh_boolean("low_surrogate"); + symbol_exprt high = fresh_boolean("high_surrogate"); + + exprt char1_as_int = typecast_exprt(str[args[1]],return_type); + exprt char2_as_int = typecast_exprt(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))],return_type); + + exprt pair_value = + plus_exprt + (constant_of_nat(0x010000,return_type), + (plus_exprt + (mult_exprt + (mod_exprt(char1_as_int,constant_of_nat(0x0800,return_type)), + constant_of_nat(0x0400,return_type)), + mod_exprt(char2_as_int,constant_of_nat(0x0400,return_type))))); + + exprt return_pair = and_exprt(is_high_surrogate(str[args[1]]), + is_low_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))])); + + string_axioms.emplace_back(equal_exprt(low,is_low_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))]))); + string_axioms.emplace_back(equal_exprt(high,is_high_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))]))); + string_axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); + string_axioms.emplace_back(not_exprt(return_pair), + equal_exprt(result,char1_as_int)); + return result; +} + +exprt string_refinementt::convert_string_code_point_before( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(false); +} + +exprt string_refinementt::convert_string_code_point_count( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(false); +} + +exprt string_refinementt::convert_string_offset_by_code_point( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(false); +} + // We compute the index set for all formulas, instantiate the formulas // with the found indexes, and add them as lemmas. void string_refinementt::add_instantiations() diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 04a67a76a7d..53ac3b57a1c 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -71,10 +71,19 @@ class string_refinementt: public bv_refinementt exprt convert_string_last_index_of(const function_application_exprt &f); bvt convert_char_literal(const function_application_exprt &f); bvt convert_string_char_at(const function_application_exprt &f); + exprt convert_string_code_point_at(const function_application_exprt &f); + exprt convert_string_code_point_before(const function_application_exprt &f); + exprt convert_string_code_point_count(const function_application_exprt &f); + exprt convert_string_offset_by_code_point(const function_application_exprt &f); exprt convert_string_parse_int(const function_application_exprt &f); exprt convert_string_to_char_array(const function_application_exprt &f); private: + + // Tells if a char value is in the high-surrogates or low surrogates ranges + exprt is_high_surrogate(const exprt & chr); + exprt is_low_surrogate(const exprt & chr); + // All constraints produced by the code axiom_vect string_axioms; diff --git a/src/util/unicode.cpp b/src/util/unicode.cpp index 6c40a1f3ec3..ee675cb8834 100644 --- a/src/util/unicode.cpp +++ b/src/util/unicode.cpp @@ -7,6 +7,8 @@ Author: Daniel Kroening, kroening@kroening.com \*******************************************************************/ #include +#include +#include #include "unicode.h" @@ -146,7 +148,43 @@ std::wstring widen(const std::string &s) /*******************************************************************\ -Function: +Function: utf32_to_utf8 + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +void utf32_to_utf8(unsigned int c, std::string &result) +{ + if(c<=0x7f) + result+=char(c); + else if(c<=0x7ff) + { + result+=char((c >> 6) | 0xc0); + result+=char((c & 0x3f) | 0x80); + } + else if(c<=0xffff) + { + result+=char((c >> 12) | 0xe0); + result+=char(((c >> 6) & 0x3f) | 0x80); + result+=char((c & 0x3f) | 0x80); + } + else + { + result+=char((c >> 18) | 0xf0); + result+=char(((c >> 12) & 0x3f)| 0x80); + result+=char(((c >> 6) & 0x3f) | 0x80); + result+=char((c & 0x3f) | 0x80); + } +} + +/*******************************************************************\ + +Function: utf32_to_utf8 Inputs: @@ -162,34 +200,32 @@ std::string utf32_to_utf8(const std::basic_string &s) result.reserve(s.size()); // at least that long - for(std::basic_string::const_iterator - it=s.begin(); - it!=s.end(); - it++) - { - unsigned int c=*it; + for(const auto it : s) + utf32_to_utf8(it, result); + + return result; +} + +/*******************************************************************\ + +Function: utf16_to_utf8 + + Inputs: + + Outputs: + + Purpose: + +\*******************************************************************/ + +std::string utf16_to_utf8(const std::basic_string &s) +{ + std::string result; - if(c<=0x7f) - result+=char(c); - else if(c<=0x7ff) - { - result+=char((c >> 6) | 0xc0); - result+=char((c & 0x3f) | 0x80); - } - else if(c<=0xffff) - { - result+=char((c >> 12) | 0xe0); - result+=char(((c >> 6) & 0x3f) | 0x80); - result+=char((c & 0x3f) | 0x80); - } - else - { - result+=char((c >> 18) | 0xf0); - result+=char(((c >> 12) & 0x3f)| 0x80); - result+=char(((c >> 6) & 0x3f) | 0x80); - result+=char((c & 0x3f) | 0x80); - } - } + result.reserve(s.size()); // at least that long + + for(const auto it : s) + utf32_to_utf8(it, result); return result; } @@ -219,3 +255,9 @@ const char **narrow_argv(int argc, const wchar_t **argv_wide) return argv_narrow; } + +std::wstring utf8_to_utf16(const std::string& in) +{ + std::wstring_convert > converter; + return converter.from_bytes(in); +} diff --git a/src/util/unicode.h b/src/util/unicode.h index e54b74cf36d..05bc84a463d 100644 --- a/src/util/unicode.h +++ b/src/util/unicode.h @@ -20,6 +20,9 @@ std::string narrow(const std::wstring &s); std::wstring widen(const std::string &s); std::string utf32_to_utf8(const std::basic_string &s); +std::string utf16_to_utf8(const std::basic_string &s); + +std::wstring utf8_to_utf16(const std::string&); const char **narrow_argv(int argc, const wchar_t **argv_wide); From acbc7647141af9a0b8366d1561d642407de1030d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 7 Oct 2016 15:08:01 +0100 Subject: [PATCH 126/221] codePointBefore and Count --- regression/strings/java_code_point/test.desc | 9 ++++ .../java_code_point/test_code_point.class | Bin 0 -> 778 bytes .../java_code_point/test_code_point.java | 9 ++++ src/goto-programs/pass_preprocess.cpp | 4 ++ src/solvers/refinement/string_expr.cpp | 12 +---- src/solvers/refinement/string_refinement.cpp | 42 +++++++++++++++--- src/solvers/refinement/string_refinement.h | 2 + 7 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 regression/strings/java_code_point/test.desc create mode 100644 regression/strings/java_code_point/test_code_point.class create mode 100644 regression/strings/java_code_point/test_code_point.java diff --git a/regression/strings/java_code_point/test.desc b/regression/strings/java_code_point/test.desc new file mode 100644 index 00000000000..b653e8cc8c0 --- /dev/null +++ b/regression/strings/java_code_point/test.desc @@ -0,0 +1,9 @@ +CORE +test_code_point.class +--pass +^EXIT=0$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_code_point.java line 5: SUCCESS$ +^\[assertion.2\] assertion at file test_code_point.java line 6: SUCCESS$ +^\[assertion.3\] assertion at file test_code_point.java line 7: SUCCESS$ +-- \ No newline at end of file diff --git a/regression/strings/java_code_point/test_code_point.class b/regression/strings/java_code_point/test_code_point.class new file mode 100644 index 0000000000000000000000000000000000000000..a4e967240b772380e30853a31f835ac4dc3d90e4 GIT binary patch literal 778 zcmZuu%Wl&^6g?9^#&MiBByAEJN(mHjT4)v(D=I_@AVq|Sl&TVCQ8~^~xukYwJA42t zV!6bn zDqva8F=s-@j6}}KQs+2t;sWM5E;5wnohTAv>;-;w+l!puK=c{d27|uh`Cfd3L9rX_ z3~DRr3x>&#=Zgo!ot_BSB$+OD9M5Mc+fO>%&U2?ZaQv-iHx502>$-fH@5YY%?7p*` z@Hs9q7%T4JSlsLe!_XCXJt;L6izwc7$!K#o@cej53R;*%fnlzG`1Zx&=T}MHOX}-C z>PriGOpv;T%di=$X)miM0q=xi5L#%!wy=Oj3iFR2#}x}#vBXeFpFiwv3pf4?I!eco zldV3Iovso=wcCw0iH^Zr;%N|4tcfww3Wh#0HM@O8Ob3d`}t%n@??;Ocv*$|oqP?nx4= 2); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 840a559c30f..74267699391 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -177,6 +177,10 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); } else if(function_id == irep_idt("java::java.lang.String.codePointAt:(I)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_at_func"); + } else if(function_id == irep_idt("java::java.lang.String.codePointBefore:(I)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_before_func"); + } else if(function_id == irep_idt("java::java.lang.String.codePointCount:(II)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_count_func"); } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_hash_code_func"); diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 834cbeff979..08c1f1be4c1 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -9,6 +9,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +#include exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; @@ -185,9 +186,6 @@ void string_exprt::of_function_application(const function_application_exprt & ex throw "string_exprt::of_function_application: not a string function"; } -#include -#include - irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); @@ -196,14 +194,7 @@ irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ - std::cout << "string_exprt::of_string_constant " << std::endl - << "original string: " << sval << std::endl; - std::string str = sval.c_str(); - for (std::size_t i = 0; i < str.size(); ++i) { - std::cout << "utf8[" << i << "] = " << std::hex << (unsigned)((unsigned char)str[i]) << std::endl; - } - // should only do this for java std::wstring utf16 = utf8_to_utf16(str); // warning: endianness should be used as a flag when using this function @@ -213,7 +204,6 @@ void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_ constant_exprt idx(idx_binary, refined_string_typet::index_type()); // warning: this should disappear if utf8_to_utf16 takes into account endianness wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); - std::cout << "utf16[" << i << "] = " << std::hex << (unsigned)big_endian << std::endl; std::string sval_binary=integer2binary((unsigned)big_endian, char_width); constant_exprt c(sval_binary,char_type); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 71f54baf7c9..db470709474 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -899,8 +899,6 @@ exprt string_refinementt::convert_string_code_point_at( typet return_type = f.type(); string_exprt str = make_string(args[0]); symbol_exprt result = string_exprt::fresh_symbol("char",return_type); - symbol_exprt low = fresh_boolean("low_surrogate"); - symbol_exprt high = fresh_boolean("high_surrogate"); exprt char1_as_int = typecast_exprt(str[args[1]],return_type); exprt char2_as_int = typecast_exprt(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))],return_type); @@ -917,8 +915,6 @@ exprt string_refinementt::convert_string_code_point_at( exprt return_pair = and_exprt(is_high_surrogate(str[args[1]]), is_low_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))])); - string_axioms.emplace_back(equal_exprt(low,is_low_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))]))); - string_axioms.emplace_back(equal_exprt(high,is_high_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))]))); string_axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); string_axioms.emplace_back(not_exprt(return_pair), equal_exprt(result,char1_as_int)); @@ -929,14 +925,48 @@ exprt string_refinementt::convert_string_code_point_before( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(false); + assert(args.size() == 2); + typet return_type = f.type(); + symbol_exprt result = string_exprt::fresh_symbol("char",return_type); + string_exprt str = make_string(args[0]); + + exprt char1 = str[minus_exprt(args[1],refined_string_typet::index_of_int(2))]; + exprt char1_as_int = typecast_exprt(char1,return_type); + exprt char2 = str[minus_exprt(args[1],refined_string_typet::index_of_int(1))]; + exprt char2_as_int = typecast_exprt(char2,return_type); + + exprt pair_value = + plus_exprt + (constant_of_nat(0x010000,return_type), + (plus_exprt + (mult_exprt + (mod_exprt(char1_as_int,constant_of_nat(0x0800,return_type)), + constant_of_nat(0x0400,return_type)), + mod_exprt(char2_as_int,constant_of_nat(0x0400,return_type))))); + + exprt return_pair = and_exprt(is_high_surrogate(char1),is_low_surrogate(char2)); + + string_axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); + string_axioms.emplace_back(not_exprt(return_pair), + equal_exprt(result,char2_as_int)); + return result; } exprt string_refinementt::convert_string_code_point_count( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(false); + assert(args.size() == 3); + string_exprt str = make_string(args[0]); + exprt begin = args[1]; + exprt end = args[2]; + typet return_type = f.type(); + symbol_exprt result = string_exprt::fresh_symbol("code_point_count",return_type); + exprt length = minus_exprt(end,begin); + string_axioms.emplace_back(binary_relation_exprt(result,ID_le,length)); + string_axioms.emplace_back(binary_relation_exprt(result,ID_ge,div_exprt(length,refined_string_typet::index_of_int(2)))); + + return result; } exprt string_refinementt::convert_string_offset_by_code_point( diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 53ac3b57a1c..081101333df 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -73,6 +73,8 @@ class string_refinementt: public bv_refinementt bvt convert_string_char_at(const function_application_exprt &f); exprt convert_string_code_point_at(const function_application_exprt &f); exprt convert_string_code_point_before(const function_application_exprt &f); + + // warning this function is underspecified exprt convert_string_code_point_count(const function_application_exprt &f); exprt convert_string_offset_by_code_point(const function_application_exprt &f); exprt convert_string_parse_int(const function_application_exprt &f); From 3731dd8b458b4605e060e0364854433f2736bed2 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 7 Oct 2016 16:50:34 +0100 Subject: [PATCH 127/221] adding appendCodePoint --- regression/strings/java_code_point/test.desc | 2 + .../java_code_point/test_code_point.class | Bin 778 -> 1025 bytes .../java_code_point/test_code_point.java | 4 ++ src/goto-programs/pass_preprocess.cpp | 5 +++ src/solvers/refinement/string_expr.cpp | 42 +++++++++++++++++- src/solvers/refinement/string_expr.h | 2 + src/solvers/refinement/string_functions.cpp | 4 ++ src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 13 +++++- src/solvers/refinement/string_refinement.h | 3 +- 10 files changed, 73 insertions(+), 3 deletions(-) diff --git a/regression/strings/java_code_point/test.desc b/regression/strings/java_code_point/test.desc index b653e8cc8c0..bb69366ce61 100644 --- a/regression/strings/java_code_point/test.desc +++ b/regression/strings/java_code_point/test.desc @@ -6,4 +6,6 @@ test_code_point.class ^\[assertion.1\] assertion at file test_code_point.java line 5: SUCCESS$ ^\[assertion.2\] assertion at file test_code_point.java line 6: SUCCESS$ ^\[assertion.3\] assertion at file test_code_point.java line 7: SUCCESS$ +^\[assertion.4\] assertion at file test_code_point.java line 8: SUCCESS$ +^\[assertion.5\] assertion at file test_code_point.java line 11: SUCCESS$ -- \ No newline at end of file diff --git a/regression/strings/java_code_point/test_code_point.class b/regression/strings/java_code_point/test_code_point.class index a4e967240b772380e30853a31f835ac4dc3d90e4..c257f0633ec65db2643a2b314c4f01928dc14660 100644 GIT binary patch delta 638 zcmY+BO=}ZT6o#Lhnam`UsZCRBqHWb`t!)#HF>U>BO^XYuf~epJLK%{2jg}-#M!{8a zD=38Qx)I#C))k;pUayI82&Xc#f&{_`7f?%z^f-%OC z*6-<^Q4ZS_TrN^nWL|i$z5KRU+sc=kO+N^$_1di_Api7+-&;c>YFuT z?`gCt)n23F*D8HUF)@34?oPil|DUheS>@+mPzn{MaBJ&ZU$ zk1h$x?%iBUPKF-!uuRtMa42VV82&gQwOgd;HX}Y@%I#6c#k+{jIx)(kzr-PsFMN+H zXD~wafN}dV6X|sNK!5n8kjMKCE%sgxsZo+0Ms~5y&zQy@#=!4icly34k)fM<1}A#Y GIr$eFKyN|- delta 380 zcmYL@y-osA6okLK%W`2|1VI5o{6$3kAxdnG7B*sKsRbcQ6k}MkY%EPotn3J#iM6#c z(Zs?Bu=E9d5o0_{qBdvFojYe{t|PbM&G+xuH=st<#vvCWAH`?RIuN z&-EM@DLYhHQpEjM*KZuT$F0VN+wS<9Wrr13`}gX!e`u`l2faWgvWU5C(h7-_IU=uu zpc1qyFQ~^rNK$5aKq{i77?nMc-pHvTxYz$Q>Q{l*7--X2vWMi?A}^OUG<71332S41 tk=LX%8DTPiu^R(_NT#r#8M;G<9tfFFnE$@N9ReQ= 2); + assert(s.offsetByCodePoints(1,2) >= 3); + StringBuilder sb = new StringBuilder(); + sb.appendCodePoint(0x10907); + assert(s.charAt(1) == sb.charAt(0)); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 74267699391..41d9fa09da9 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -181,6 +181,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_before_func"); } else if(function_id == irep_idt("java::java.lang.String.codePointCount:(II)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_count_func"); + } else if(function_id == irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_offset_by_code_point_func"); } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_hash_code_func"); @@ -256,6 +258,9 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_float_func",string_builders); + } else if(function_id == irep_idt + ("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_code_point_func",string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_func",string_builders); diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 08c1f1be4c1..ace061de546 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -127,6 +127,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_concat_double(expr,symbol_to_string,axioms); } else if (is_string_concat_float_func(id)) { return of_string_concat_float(expr,symbol_to_string,axioms); + } else if (is_string_concat_code_point_func(id)) { + return of_string_concat_code_point(expr,symbol_to_string,axioms); } else if (is_string_insert_func(id)) { return of_string_insert(expr,symbol_to_string,axioms); } else if (is_string_insert_int_func(id)) { @@ -702,6 +704,35 @@ void string_exprt::of_char } + +void string_exprt::of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string) +{ + typet type = code_point.type(); + binary_relation_exprt small(code_point,ID_lt,constant_of_nat(0x010000,32, type)); + axioms.emplace_back(small, + equal_exprt(length(), refined_string_typet::index_of_int(1))); + axioms.emplace_back(not_exprt(small), + equal_exprt(length(), refined_string_typet::index_of_int(2))); + axioms.emplace_back(small,equal_exprt((*this)[refined_string_typet::index_of_int(0)],typecast_exprt(code_point,refined_string_typet::java_char_type()))); + + axioms.emplace_back(not_exprt(small), + equal_exprt + ((*this)[refined_string_typet::index_of_int(0)], + typecast_exprt + (plus_exprt(constant_of_nat(0xD800,32, type), + div_exprt(minus_exprt(code_point,constant_of_nat(0x010000,32,type)),constant_of_nat(0x0400,32, type))), + refined_string_typet::java_char_type()))); + axioms.emplace_back(not_exprt(small), + equal_exprt + ((*this)[refined_string_typet::index_of_int(1)], + typecast_exprt + (plus_exprt(constant_of_nat(0xDC00,32, type), + mod_exprt(code_point,constant_of_nat(0x0400,32, type))), + refined_string_typet::java_char_type()))); + +} + + void string_exprt::of_string_char_set (const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) { @@ -834,11 +865,20 @@ void string_exprt::of_string_concat_float(const function_application_exprt &f, s const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2; + string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); of_string_concat(s1,s2,symbol_to_string,axioms); } +void string_exprt::of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_code_point(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,symbol_to_string,axioms); +} + void string_exprt::of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt & offset, std::map & symbol_to_string, diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index ac2fbc6aa25..c3a7b072707 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -87,6 +87,7 @@ class string_exprt : public struct_exprt { void of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + void of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); // insert s2 in s1 at the given position void of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset, std::map & symbol_to_string, axiom_vect & axioms); @@ -125,6 +126,7 @@ class string_exprt : public struct_exprt { void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); void of_char(const function_application_exprt &f, axiom_vect & axioms); void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); + void of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); void of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 4ac6c634217..7e0db1459e3 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -24,6 +24,7 @@ Date: September 2016 #define string_concat_bool_func "__CPROVER_uninterpreted_strcat_bool_func" #define string_concat_float_func "__CPROVER_uninterpreted_strcat_float_func" #define string_concat_double_func "__CPROVER_uninterpreted_strcat_double_func" +#define string_concat_code_point_func "__CPROVER_uninterpreted_strcat_code_point_func" #define string_contains_func "__CPROVER_uninterpreted_strcontains" #define string_char_set_func "__CPROVER_uninterpreted_string_char_set_func" #define string_copy_func "__CPROVER_uninterpreted_string_copy" @@ -231,3 +232,6 @@ bool is_string_code_point_count_func(irep_idt id){ bool is_string_code_point_offset_by_code_point_func(irep_idt id){ return (starts_with(id2string(id),string_code_point_offset_by_code_point_func)); } +bool is_string_concat_code_point_func(irep_idt id){ + return (starts_with(id2string(id),string_concat_code_point_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index d5a0191e297..fa0fc615f4b 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -32,6 +32,7 @@ bool is_string_concat_char_func(irep_idt id); bool is_string_concat_bool_func(irep_idt id); bool is_string_concat_double_func(irep_idt id); bool is_string_concat_float_func(irep_idt id); +bool is_string_concat_code_point_func(irep_idt id); bool is_string_contains_func(irep_idt id); bool is_string_copy_func(irep_idt id); bool is_string_delete_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index db470709474..8148b1fd7cc 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -973,7 +973,18 @@ exprt string_refinementt::convert_string_offset_by_code_point( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(false); + assert(args.size() == 3); + string_exprt str = make_string(args[0]); + exprt index = args[1]; + exprt offset = args[2]; + typet return_type = f.type(); + symbol_exprt result = string_exprt::fresh_symbol("offset_by_code_point",return_type); + exprt minimum = plus_exprt(index,plus_exprt(index,offset)); + exprt maximum = plus_exprt(index,plus_exprt(index,mult_exprt(offset,refined_string_typet::index_of_int(2)))); + string_axioms.emplace_back(binary_relation_exprt(result,ID_le,maximum)); + string_axioms.emplace_back(binary_relation_exprt(result,ID_ge,minimum)); + + return result; } // We compute the index set for all formulas, instantiate the formulas diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 081101333df..d4964e137e4 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -74,8 +74,9 @@ class string_refinementt: public bv_refinementt exprt convert_string_code_point_at(const function_application_exprt &f); exprt convert_string_code_point_before(const function_application_exprt &f); - // warning this function is underspecified + // Warning: this function is underspecified exprt convert_string_code_point_count(const function_application_exprt &f); + // Warning: this function is underspecified exprt convert_string_offset_by_code_point(const function_application_exprt &f); exprt convert_string_parse_int(const function_application_exprt &f); exprt convert_string_to_char_array(const function_application_exprt &f); From 57b3d8d1240b9bb9a24b474c9d53132e12f02418 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 10 Oct 2016 10:53:13 +0100 Subject: [PATCH 128/221] adding String.compareTo --- regression/strings/java_compare/test.desc | 8 ++ .../strings/java_compare/test_compare.class | Bin 0 -> 681 bytes .../strings/java_compare/test_compare.java | 10 +++ src/goto-programs/pass_preprocess.cpp | 2 + src/solvers/refinement/string_functions.cpp | 4 + src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 74 ++++++++++++++++++ src/solvers/refinement/string_refinement.h | 3 + 8 files changed, 102 insertions(+) create mode 100644 regression/strings/java_compare/test.desc create mode 100644 regression/strings/java_compare/test_compare.class create mode 100644 regression/strings/java_compare/test_compare.java diff --git a/regression/strings/java_compare/test.desc b/regression/strings/java_compare/test.desc new file mode 100644 index 00000000000..e6304612394 --- /dev/null +++ b/regression/strings/java_compare/test.desc @@ -0,0 +1,8 @@ +CORE +test_compare.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_compare.java line 6: SUCCESS$ +^\[assertion.2\] assertion at file test_compare.java line 8: FAILURE$ +-- diff --git a/regression/strings/java_compare/test_compare.class b/regression/strings/java_compare/test_compare.class new file mode 100644 index 0000000000000000000000000000000000000000..0868aac8a2a8d9218e600411cbc102708c0315a6 GIT binary patch literal 681 zcmZuvOHUL*5dLc3JIune3+wnm1yL6yl4#U}#Ar|xlLZe;Ou&Qbo$Zju-5Kne^~Z40 zn`bqFL=(OHpEOpFz-VI9sj9BWS6@~4k6&ND0l1B&5Fz3KX9Jw8A;9?%7cl4JVh9hh zk4qsgW8TLCp|vRTT|^3lm0PqfZ7A^IE4$F&I8 z(IGUdis$`3nH2xH{_rN$j!A4~gxSu227AVF;@cc+V(l&;fj*ibpU^f)F0A@PGhDlDeC9VUG=z@; literal 0 HcmV?d00001 diff --git a/regression/strings/java_compare/test_compare.java b/regression/strings/java_compare/test_compare.java new file mode 100644 index 00000000000..b4de55705ac --- /dev/null +++ b/regression/strings/java_compare/test_compare.java @@ -0,0 +1,10 @@ +public class test_compare { + + public static void main(String[] argv) { + String s1 = "abc"; + String s2 = "aac"; + assert(s1.compareTo(s2) == 1); + + assert(s2.compareTo(argv[0]) != -1); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 41d9fa09da9..0332b5671ca 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -234,6 +234,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_replace_func"); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); + } else if(function_id == irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_compare_to_func"); } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 7e0db1459e3..f22bdc8e9a9 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -17,6 +17,7 @@ Date: September 2016 #define string_code_point_before_func "__CPROVER_uninterpreted_string_code_point_before_func" #define string_code_point_count_func "__CPROVER_uninterpreted_string_code_point_count_func" #define string_code_point_offset_by_code_point_func "__CPROVER_uninterpreted_string_offset_by_code_point_func" +#define string_compare_to_func "__CPROVER_uninterpreted_string_compare_to_func" #define string_concat_func "__CPROVER_uninterpreted_strcat_func" #define string_concat_int_func "__CPROVER_uninterpreted_strcat_int_func" #define string_concat_long_func "__CPROVER_uninterpreted_strcat_long_func" @@ -235,3 +236,6 @@ bool is_string_code_point_offset_by_code_point_func(irep_idt id){ bool is_string_concat_code_point_func(irep_idt id){ return (starts_with(id2string(id),string_concat_code_point_func)); } +bool is_string_compare_to_func(irep_idt id){ + return (starts_with(id2string(id),string_compare_to_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index fa0fc615f4b..3dcffe618d2 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -25,6 +25,7 @@ bool is_string_code_point_at_func(irep_idt id); bool is_string_code_point_before_func(irep_idt id); bool is_string_code_point_count_func(irep_idt id); bool is_string_code_point_offset_by_code_point_func(irep_idt id); +bool is_string_compare_to_func(irep_idt id); bool is_string_concat_func(irep_idt id); bool is_string_concat_int_func(irep_idt id); bool is_string_concat_long_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 8148b1fd7cc..cc5da628f8b 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -229,6 +229,8 @@ bvt string_refinementt::convert_function_application( return convert_bv(convert_string_code_point_count(expr)); } else if (is_string_code_point_offset_by_code_point_func(id)) { return convert_bv(convert_string_offset_by_code_point(expr)); + } else if (is_string_compare_to_func(id)) { + return convert_bv(convert_string_compare_to(expr)); } } @@ -1029,6 +1031,78 @@ exprt string_refinementt::convert_string_to_char_array return str.content(); } + + +exprt string_refinementt::convert_string_intern(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + + string_exprt str = make_string(args[0]); + + // intern(str) = s_0 || s_1 || ... + // for each string s. + // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + + throw("string_refinementt::convert_string_intern : incomplete implementation"); +} + + +exprt string_refinementt::convert_string_compare_to(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); + typet return_type = f.type(); + symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); + + // In the lexicographic comparison, x is the first point where the two strings differ. + // res == 0 => |s1| = |s2| && forall i < |s1|. s1[i] == s2[i] + // res != 0 => + // (|s1| <= |s2| && exists x < |s1|. res = s1[x] - s2[x] && forall i= |s2| && exists x < |s2|. res = s1[x] - s2[x] && forall i |s2| && res = |s1| - |s2| && forall i<|s2| s1[i]=s2[i]) + + // The second part can be rewriten as: + // exists x. + // res != 0 ==> x> 0 && + // ((|s1| <= |s2| && x < |s1|) || (|s1| >= |s2| && x < |s2|) && res = s1[x] - s2[x] ) + // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| + // && forall i < x. res != 0 => s1[i] = s2[i] + + symbol_exprt i = string_exprt::fresh_symbol("QA_compare_to",index_type); + equal_exprt res_null = equal_exprt(res,constant_of_nat(0,return_type)); + string_axioms.emplace_back(res_null, equal_exprt(s1.length(),s2.length())); + string_axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,zero,s1.length())); + symbol_exprt x = fresh_index("index_compare_to"); + string_axioms.push_back + (implies_exprt + (not_exprt(res_null), + and_exprt + (binary_relation_exprt(x,ID_ge,constant_of_nat(0,return_type)), + or_exprt + (and_exprt + (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), + or_exprt + (and_exprt(s1<=s2,s1 > x), and_exprt(s1>=s2,s2 > x))), + and_exprt + (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), + or_exprt + (and_exprt(s1s2,equal_exprt(x,s2.length())))))) + )); + + string_axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,zero,x)); + + return res; +} + + + +//// Pass algorithm + unsigned integer_of_expr(const constant_exprt & expr) { return integer2unsigned(string2integer(as_string(expr.get_value()),2)); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index d4964e137e4..2ddf62d1f11 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -81,6 +81,9 @@ class string_refinementt: public bv_refinementt exprt convert_string_parse_int(const function_application_exprt &f); exprt convert_string_to_char_array(const function_application_exprt &f); + exprt convert_string_intern(const function_application_exprt &f); + exprt convert_string_compare_to(const function_application_exprt &f); + private: // Tells if a char value is in the high-surrogates or low surrogates ranges From f6bc09cd7e2b7a9397119186596b7be471b99cb5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 10 Oct 2016 14:43:43 +0100 Subject: [PATCH 129/221] adding String.hashCode --- regression/strings/java_compare/test.desc | 2 + .../strings/java_compare/test_compare.class | Bin 681 -> 780 bytes .../strings/java_compare/test_compare.java | 10 ++ src/goto-programs/pass_preprocess.cpp | 2 + src/solvers/refinement/string_expr.cpp | 2 + src/solvers/refinement/string_expr.h | 6 +- src/solvers/refinement/string_functions.cpp | 4 + src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 152 +++++++++++++----- src/solvers/refinement/string_refinement.h | 7 +- 10 files changed, 144 insertions(+), 42 deletions(-) diff --git a/regression/strings/java_compare/test.desc b/regression/strings/java_compare/test.desc index e6304612394..c500900a21e 100644 --- a/regression/strings/java_compare/test.desc +++ b/regression/strings/java_compare/test.desc @@ -5,4 +5,6 @@ test_compare.class ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_compare.java line 6: SUCCESS$ ^\[assertion.2\] assertion at file test_compare.java line 8: FAILURE$ +^\[assertion.3\] assertion at file test_compare.java line 11: SUCCESS$ +^\[assertion.4\] assertion at file test_compare.java line 12: FAILURE$ -- diff --git a/regression/strings/java_compare/test_compare.class b/regression/strings/java_compare/test_compare.class index 0868aac8a2a8d9218e600411cbc102708c0315a6..95e1ebcf7e61a6e1da0558595e2ebe2f2a37ce6e 100644 GIT binary patch delta 440 zcmY+9O-q7N5QU$s?{}|dTBfOenSH4(ii~zas~}pqYZYcfP*J4&{y-aX=cc8!tU#%t z_Whe^ThZJXDuR3G%-lJ5&Y2tY%36Q@dVB^}DR~T#au|0=ySQXLvP{@adRU}%F=aFD zF+H@ zp8~~pPVGdTqiW-5>+G;D0~XrHs$6l!2&iaM&yp;RLS!UHrOFB_L362(y46I6C0fCw z65}!Al56UNd^H45+V84-84K;+VRT58dN>8S*9<&i?e(!={u;&q4J{A~1ZHp~H)NzK zVwU)DDC4mqZY$#SSY$_p5y$u>Ycnb*`9WHPP!rp~8>|IZAr{B&;dQW$E=Kqs<4^5p Q9X-(`6xq~Ej|FCu-{&hhwg3PC delta 367 zcmYL^$w~u35Qe{=J>w+CMB})`E$*O!h{;tC-o%41AY%xkXreQNSMTB_;{cnBeJlc)V@AnU2i!~pg&||`5GKa^M&oot+86StxW!7hod6$KL zD^<1r)8;{*g2IfB+qy>WfFS~xTEHSpitsGDj_T)8_oTj?B%L@t?REF!xECvew3DPq z?cT*@6n9*f16EiaY^eRgt!f;4k^@vR)Os?RD8x$Yu-vNBm2`Xk4fU*n6s0=ZQjueX zlFS-rpwO?8p9$w=)MQmGNH5 c-Q!vhSmq1Xzw&Pitz={5cXZZDW~|140Hj(g1poj5 diff --git a/regression/strings/java_compare/test_compare.java b/regression/strings/java_compare/test_compare.java index b4de55705ac..591a68eb904 100644 --- a/regression/strings/java_compare/test_compare.java +++ b/regression/strings/java_compare/test_compare.java @@ -6,5 +6,15 @@ public static void main(String[] argv) { assert(s1.compareTo(s2) == 1); assert(s2.compareTo(argv[0]) != -1); + + String s3 = "abc"; + assert(s3.hashCode() == s1.hashCode()); + assert(s3.hashCode() == s2.hashCode()); + + //String x = s1.intern(); + //assert(x == s1); + //String s3 = "abc"; + //String y = s3.intern(); + //assert(x == y); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 0332b5671ca..4b779d33860 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -236,6 +236,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); } else if(function_id == irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_compare_to_func"); + } else if(function_id == irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_intern_func"); } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index ace061de546..51a741638e8 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -957,3 +957,5 @@ void string_exprt::of_string_insert_float(const function_application_exprt &f, s s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); of_string_insert(s1,s2,args[1],symbol_to_string,axioms); } + + diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index c3a7b072707..e81a940879a 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -54,22 +54,20 @@ class string_exprt : public struct_exprt { { return index_exprt(content(), idx);} // Comparison on the length of the strings - inline binary_relation_exprt operator< (const string_exprt & rhs) const - { return binary_relation_exprt(length(), ID_lt, rhs.length()); } inline binary_relation_exprt operator> (const string_exprt & rhs) const { return binary_relation_exprt(rhs.length(), ID_lt, length()); } inline binary_relation_exprt operator<= (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs.length()); } inline binary_relation_exprt operator>= (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt operator< (const exprt & rhs) const - { return binary_relation_exprt(length(), ID_lt, rhs); } inline binary_relation_exprt operator> (const exprt & rhs) const { return binary_relation_exprt(rhs, ID_lt, length()); } inline binary_relation_exprt operator>= (const exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs); } inline binary_relation_exprt operator<= (const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } + //this one is used by maps: inline binary_relation_exprt operator< (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } + // inline binary_relation_exprt operator< (const exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs); } static irep_idt extract_java_string(const symbol_exprt & s); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index f22bdc8e9a9..cbff21492f8 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -43,6 +43,7 @@ Date: September 2016 #define string_insert_char_func "__CPROVER_uninterpreted_string_insert_char_func" #define string_insert_float_func "__CPROVER_uninterpreted_string_insert_float_func" #define string_insert_double_func "__CPROVER_uninterpreted_string_insert_double_func" +#define string_intern_func "__CPROVER_uninterpreted_string_intern_func" #define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" #define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" #define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" @@ -239,3 +240,6 @@ bool is_string_concat_code_point_func(irep_idt id){ bool is_string_compare_to_func(irep_idt id){ return (starts_with(id2string(id),string_compare_to_func)); } +bool is_string_intern_func(irep_idt id){ + return (starts_with(id2string(id),string_intern_func)); +} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 3dcffe618d2..b9219678ae8 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -44,6 +44,7 @@ bool is_string_empty_string_func(irep_idt id); bool is_string_endswith_func(irep_idt id); bool is_string_hash_code_func(irep_idt id); bool is_string_index_of_func(irep_idt id); +bool is_string_intern_func(irep_idt id); bool is_string_insert_func(irep_idt id); bool is_string_insert_int_func(irep_idt id); bool is_string_insert_long_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index cc5da628f8b..b2fc419aedd 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -73,6 +73,46 @@ literalt string_refinementt::convert_rest(const exprt &expr) return SUB::convert_rest(expr); } + +void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) +{ + debug() << "string_refinementt::make_string of " << pretty_short(sym) << eom; + //<< " --> " << pretty_short(str) << eom; + if(str.id()==ID_symbol) + assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); + else { + // assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + if (str.id() == ID_function_application && + is_string_intern_func(to_symbol_expr(to_function_application_expr(str).function()).get_identifier())) { + symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + assign_to_symbol(sym,s); + } + else + assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + } + debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; +} + +string_exprt string_refinementt::make_string(const exprt & str) +{ + debug() << "string_refinementt::make_string of " << pretty_short(str) << eom; + if(str.id()==ID_symbol) + return string_of_symbol(to_symbol_expr(str)); + else + if (str.id() == ID_function_application && + is_string_intern_func(to_symbol_expr(to_function_application_expr(str).function()).get_identifier())){ + symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + return s; + } + else + return string_exprt::of_expr(str,symbol_to_string,string_axioms); +} + + bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now(); @@ -135,7 +175,8 @@ bvt string_refinementt::convert_symbol(const exprt &expr) const typet &type = expr.type(); const irep_idt &identifier = expr.get(ID_identifier); if(identifier.empty()) - throw "string_refinementt::convert_symbol got empty identifier"; + //throw "string_refinementt::convert_symbol got empty identifier"; + assert(false); //debug() << "convert symbol " << expr << eom; @@ -182,6 +223,7 @@ bvt string_refinementt::convert_function_application( const irep_idt &id = to_symbol_expr(name).get_identifier(); debug() << "string_refinementt::convert_function_application(" << id << ")" << eom; + if (is_string_literal_func(id) || is_string_concat_func(id) || is_string_substring_func(id) @@ -386,25 +428,6 @@ string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ } -void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) -{ - //debug() << "string_refinementt::make_string of " << pretty_short(sym) << eom - // << " --> " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); - else - assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; -} - -string_exprt string_refinementt::make_string(const exprt & str) -{ - //debug() << "string_refinementt::make_string of " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - return string_of_symbol(to_symbol_expr(str)); - else - return string_exprt::of_expr(str,symbol_to_string,string_axioms); -} exprt string_refinementt::convert_string_equal(const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); @@ -671,9 +694,34 @@ exprt string_refinementt::convert_string_hash_code(const function_application_ex { const function_application_exprt::argumentst &args = f.arguments(); string_exprt str = make_string(args[0]); - exprt res = refined_string_typet::index_of_int(0); - throw "convert_string_hash_code: unimplemented"; - return res; + typet return_type = f.type(); + + // initialisation of the missing pool variable + std::map::iterator it; + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(hash.find(it->second) == hash.end()) + hash[it->second] = string_exprt::fresh_symbol("hash", return_type); + + // for each string s. + // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + + // WARNING: the specification may be incomplete + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { + symbol_exprt i = string_exprt::fresh_symbol("index_hash", refined_string_typet::index_type()); + string_axioms.emplace_back + (or_exprt + (equal_exprt(hash[it->second],hash[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt + (not_exprt(equal_exprt(str[i],it->second[i])), + and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero ))) + )))); + } + + + return hash[str]; } exprt string_refinementt::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ @@ -1033,19 +1081,6 @@ exprt string_refinementt::convert_string_to_char_array -exprt string_refinementt::convert_string_intern(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - - string_exprt str = make_string(args[0]); - - // intern(str) = s_0 || s_1 || ... - // for each string s. - // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) - - throw("string_refinementt::convert_string_intern : incomplete implementation"); -} exprt string_refinementt::convert_string_compare_to(const function_application_exprt &f) @@ -1091,7 +1126,7 @@ exprt string_refinementt::convert_string_compare_to(const function_application_e and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), or_exprt - (and_exprt(s1s2,equal_exprt(x,s2.length())))))) + (and_exprt(s2>s1,equal_exprt(x,s1.length())), and_exprt(s1>s2,equal_exprt(x,s2.length())))))) )); string_axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,zero,x)); @@ -1099,6 +1134,49 @@ exprt string_refinementt::convert_string_compare_to(const function_application_e return res; } +symbol_exprt string_refinementt::convert_string_intern(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + string_exprt str = make_string(args[0]); + typet return_type = f.type(); + + + // initialisation of the missing pool variable + std::map::iterator it; + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(pool.find(it->second) == pool.end()) + pool[it->second] = string_exprt::fresh_symbol("pool", return_type); + + // intern(str) = s_0 || s_1 || ... + // for each string s. + // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + + //symbol_exprt intern = string_exprt::fresh_symbol("intern",return_type); + + exprt disj = false_exprt(); + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); + + string_axioms.emplace_back(disj); + + + // WARNING: the specification may be incomplete or incorrect + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { + symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); + string_axioms.emplace_back + (or_exprt + (equal_exprt(pool[it->second],pool[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt(str>i, not_exprt(equal_exprt(str[i],it->second[i])))) + ))); + } + + + return pool[str]; +} //// Pass algorithm diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 2ddf62d1f11..f3e306421fa 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -81,8 +81,9 @@ class string_refinementt: public bv_refinementt exprt convert_string_parse_int(const function_application_exprt &f); exprt convert_string_to_char_array(const function_application_exprt &f); - exprt convert_string_intern(const function_application_exprt &f); exprt convert_string_compare_to(const function_application_exprt &f); + symbol_exprt convert_string_intern(const function_application_exprt &f); + private: @@ -131,6 +132,10 @@ class string_refinementt: public bv_refinementt string_exprt string_of_symbol(const symbol_exprt & sym); + + std::map pool; + std::map hash; + // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. string_exprt make_string(const exprt &str); From 98d06870fe7dc6a4f1bc594019fd1cf70b2dbf57 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 10 Oct 2016 16:21:08 +0100 Subject: [PATCH 130/221] adding Integer.toHexString --- .../strings/java_compare/test_compare.class | Bin 780 -> 692 bytes .../strings/java_compare/test_compare.java | 12 ++- regression/strings/java_int/test.desc | 13 +-- regression/strings/java_int/test_int.class | Bin 1003 -> 1140 bytes regression/strings/java_int/test_int.java | 6 +- src/goto-programs/pass_preprocess.cpp | 7 +- src/solvers/refinement/string_expr.cpp | 77 ++++++++++++++++++ src/solvers/refinement/string_expr.h | 2 + src/solvers/refinement/string_functions.cpp | 6 +- src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 24 +++--- src/solvers/refinement/string_refinement.h | 2 + 12 files changed, 121 insertions(+), 29 deletions(-) diff --git a/regression/strings/java_compare/test_compare.class b/regression/strings/java_compare/test_compare.class index 95e1ebcf7e61a6e1da0558595e2ebe2f2a37ce6e..646e7934adf0cd0a758a800884ad22bc7640e923 100644 GIT binary patch literal 692 zcmZuuO>fgc5Pjp=*~E34uTtDXfkImnzIs4hphBPmr?eb`kZ2Fp##vQc5<6ON_%XdB z&VbZPAinjTN2h9cJnSj+!WDC3 zD0NC$Z0&cBkIab1sIl+qVVU=%E z=37xMcI&WL024=r?L0>-{1U&xjZ@HjSBNUx;^ZfBYYlbwUFirO9~RhXc%6o~bMpj+ z-CJz#`yb#RqkenIe~Y=#2wt6{_|;)~6Rc%M1AHDFvNz8ps*G8~I@<vU54k$*G_MUsscg}ae@7y21zkCC58!HwHm^N|6#7rJ}T(wZgH3PF2 zbWF>`bpvx2=5fQo0z+ki$FYbKFAUaxpL*M4I4!wv9W}k47KdaM`u2sL{S*o zXkeMazQ|~xX`_WULpf`E-rE;$@>gmso*{p#WIJS-YW&CDGqSSBEr#eMOG1oi+`ydN3L93o7 zNh2IoXfI1YQ>#YNca)B!ZhnMzgvnNWgq(Ja!dK|8PGEdb)75rUy+wfXE(088YmBXo zV7BQ0r%3`tcM*_^lvL3?OxkOtAxG+T5^mxyEZie|FUZ;f>71mB3bbFS8k{%4lSTJJ(HD zHX&kSqKPXXDMpR%P2Bhg_z$>nV{k*%Go#|>-gC}9kMDQxSN+|(^zrAL_rNH#HVOJ{ z`Z;WKgn=&N3~G+rnDkj3^Iwizu9SSgRn!z2}jQC(PEa+qRTVR^MRZ+^MqX=WVGaJDs} zo))9tjq|m;SG`-yjk+RIyLr31x~6dR7gwrxs-@Lxqh7kauu@y}riZS#zNpHTxF`aZ z$oON$3ZoDzIbHE`ax1yb!Zzx;pU8eWBSBEn#Q`#6OR8EYBtHCTErm8WQub@2Q`QTN zHg48RIUQncqHi&;Z4>zr#K&DDQGUpXYbK4)kH}{u;SS+Maf_U*li$|2_9`Fzuk;~8 z0mNKDZlGoPF+oa;br6eT!PuB1$^{(e<%jBYb5G>m7lE51?XmE_6Y?El&q}*I`j=Fh zQm#3qln74m(xZ0i7ypmdE7qhm@7Y_;Sg->~rHOawZljGS7~z)~f;jM(@!z8SF(#qd LIe(qGKtk_tJs4UM delta 450 zcmYL_zb^w}7{@>F^{(&rTxok+tx`(W&$gU)5rfz)b}^VlL}Jm!#Aa@8lL#hOB$be` z86*t;4THrfc#eqWd7oe3AJ6-4zv}tN&zn17mWG2%-l30vhXMmJ90oN-2aCMTP&gU3 zDQQL=%8Y8pTFXsyTr<&nn8Im6}VO&cIfs!Zb4qt5Wx8<+YpZJI%Gt z?WV?eMYtZUs`J1%d=YoWib`Zdpkxsg!YeTu>=~J2N_tVLWQQ0Y-Qh%vMGS1|J_l{% zXzvp9kV@K2_{WsfR?>VqrI3q8+C&nS6TGxezU`jSaf`KbP4xakkOm?5+>fe-7L~X} zPgr|JsVZNwDBhN&yC#k{#M8bY4rJqqG*4tC!Vu9fwyIc~jHX8^vFd%$r#`};>3iIF8-@&1Pg%Mv+0?J8Y(EAOR6E}DO diff --git a/regression/strings/java_int/test_int.java b/regression/strings/java_int/test_int.java index 33121560f10..620ae638dce 100644 --- a/regression/strings/java_int/test_int.java +++ b/regression/strings/java_int/test_int.java @@ -1,7 +1,6 @@ public class test_int { public static void main(String[] argv) { - String s = Integer.toString(2345); char c = s.charAt(1); char d = s.charAt(2); @@ -18,6 +17,9 @@ public static void main(String[] argv) { int j = Integer.parseInt("-4231"); assert(j == -4231); - assert(e == '2' || i < 1234 || t.charAt(0) != '-' || j != -4231); + String u = Integer.toHexString(43981); + assert(u.equals("abcd")); + + assert(e == '2' || i < 1234 || t.charAt(0) != '-' || j != -4231 || !u.equals("abcd")); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 4b779d33860..1a6138202cc 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -317,8 +317,11 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu ("java::java.lang.String.valueOf:(I)Ljava/lang/String;") ) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_int"); - + "__CPROVER_uninterpreted_string_of_int_func"); + } else if(function_id == irep_idt + ("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + "__CPROVER_uninterpreted_string_of_int_hex_func"); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 51a741638e8..edf6d3ec47d 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -161,6 +161,8 @@ void string_exprt::of_function_application(const function_application_exprt & ex return of_string_copy(expr,symbol_to_string,axioms); } else if (is_string_of_int_func(id)) { return of_int(expr,axioms); + } else if (is_string_of_int_hex_func(id)) { + return of_int_hex(expr,axioms); } else if (is_string_of_float_func(id)) { return of_float(expr,axioms); } else if (is_string_of_double_func(id)) { @@ -687,6 +689,81 @@ void string_exprt::of_int } } + +exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { + exprt zero_char = constant_of_nat(48,char_width,char_type); + exprt nine_char = constant_of_nat(57,char_width,char_type); + exprt a_char = constant_of_nat(0x61,char_width,char_type); + return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), + minus_exprt(chr,constant_of_nat(0x61 - 10,char_width,char_type)), + minus_exprt(chr,zero_char)); +} + + +void string_exprt::of_int_hex +(const exprt &i,axiom_vect & axioms,bool is_c_string) +{ + typet type = i.type(); + int width = type.get_unsigned_int(ID_width); + exprt sixteen = constant_of_nat(16,width,type); + typet char_type; + unsigned char_width; + + if(is_c_string) { + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + } + + exprt minus_char = constant_of_nat(45,char_width,char_type); + exprt zero_char = constant_of_nat(48,char_width,char_type); + exprt nine_char = constant_of_nat(57,char_width,char_type); + exprt a_char = constant_of_nat(0x61,char_width,char_type); + exprt f_char = constant_of_nat(0x66,char_width,char_type); + + int max_size = 8; + axioms.emplace_back(and_exprt(*this > index_zero,*this <= refined_string_typet::index_of_int(max_size))); + + for(int size=1; size<=max_size;size++) { + exprt sum = constant_of_nat(0,width,type); + exprt all_numbers = true_exprt(); + exprt chr = (*this)[refined_string_typet::index_of_int(0)]; + + for(int j=0; j1) { + axioms.emplace_back(premise, + not_exprt(equal_exprt((*this)[index_zero],zero_char))); + } + + } +} + +void string_exprt::of_int_hex +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_int_hex(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); +} + void string_exprt::of_char (const function_application_exprt &f,axiom_vect & axioms) { diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index e81a940879a..34e68868e33 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -114,6 +114,8 @@ class string_exprt : public struct_exprt { void of_int(const function_application_exprt &f, axiom_vect & axioms); void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); + void of_int_hex(const exprt &i, axiom_vect & axioms, bool is_c_string); + void of_int_hex(const function_application_exprt &f,axiom_vect & axioms); void of_long(const function_application_exprt &f, axiom_vect & axioms); void of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); // Warning the specifications of these functions is only partial: diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index cbff21492f8..0b2eb582abd 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -50,7 +50,8 @@ Date: September 2016 #define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" #define string_literal_func "__CPROVER_uninterpreted_string_literal" #define string_length_func "__CPROVER_uninterpreted_strlen" -#define string_of_int_func "__CPROVER_uninterpreted_string_of_int" +#define string_of_int_func "__CPROVER_uninterpreted_string_of_int_func" +#define string_of_int_hex_func "__CPROVER_uninterpreted_string_of_int_hex_func" #define string_of_long_func "__CPROVER_uninterpreted_string_of_long" #define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" #define string_of_float_func "__CPROVER_uninterpreted_string_of_float" @@ -150,6 +151,9 @@ bool is_string_parse_int_func(irep_idt id) { bool is_string_of_int_func(irep_idt id) { return (starts_with(id2string(id),string_of_int_func)); } +bool is_string_of_int_hex_func(irep_idt id) { + return (starts_with(id2string(id),string_of_int_hex_func)); +} bool is_string_of_long_func(irep_idt id) { return (starts_with(id2string(id),string_of_int_func)); } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index b9219678ae8..e3d73f39207 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -58,6 +58,7 @@ bool is_string_is_empty_func(irep_idt id); bool is_string_last_index_of_func(irep_idt id); bool is_string_length_func(irep_idt id); bool is_string_of_int_func(irep_idt id); +bool is_string_of_int_hex_func(irep_idt id); bool is_string_of_long_func(irep_idt id); bool is_string_of_bool_func(irep_idt id); bool is_string_of_float_func(irep_idt id); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index b2fc419aedd..b12a9ece164 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -1162,17 +1162,19 @@ symbol_exprt string_refinementt::convert_string_intern(const function_applicatio // WARNING: the specification may be incomplete or incorrect - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { - symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); - string_axioms.emplace_back - (or_exprt - (equal_exprt(pool[it->second],pool[str]), - or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), - and_exprt(str>i, not_exprt(equal_exprt(str[i],it->second[i])))) - ))); - } + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(it->second != str) { + symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); + string_axioms.emplace_back + (or_exprt + (equal_exprt(pool[it->second],pool[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt(not_exprt(equal_exprt(str[i],it->second[i])), + and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero))) + )))); + } return pool[str]; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index f3e306421fa..90fdca75fa3 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -82,6 +82,8 @@ class string_refinementt: public bv_refinementt exprt convert_string_to_char_array(const function_application_exprt &f); exprt convert_string_compare_to(const function_application_exprt &f); + + // Warning: this does not work at the moment because of the way we treat string pointers symbol_exprt convert_string_intern(const function_application_exprt &f); From d3a39a1b85c75ef68ab2f8e543ef062603ac1a4b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 10 Oct 2016 16:22:31 +0100 Subject: [PATCH 131/221] adding Integer.toHexString --- .../strings/java_compare/test_compare.class | Bin 692 -> 780 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/regression/strings/java_compare/test_compare.class b/regression/strings/java_compare/test_compare.class index 646e7934adf0cd0a758a800884ad22bc7640e923..5616013c523bf345c4c9743a55ef57608353b3f9 100644 GIT binary patch literal 780 zcmZuuQBTuQ6#j18wO!Y_(ZL+zL=bRn0}_oUMq)ImiOImk5fkyj+;ull=vvZt{uo~H z&1W?kQ4@XlH>vU54k$*G_MUsscg}ae@7y21zkCC58!HwHm^N|6#7rJ}T(wZgH3PF2 zbWF>`bpvx2=5fQo0z+ki$FYbKFAUaxpL*M4I4!wv9W}k47KdaM`u2sL{S*o zXkeMazQ|~xX`_WULpf`E-rE;$@>gmso*{p#WIJS-YW&CDGqSSBEr#eMOG1oi+`ydN3L93o7 zNh2IoXfI1YQ>#YNca)B!ZhnMzgvnNWgq(Ja!dK|8PGEdb)75rUy+wfXE(088YmBXo zV7BQ0r%3`tcM*_^lvL3?OxkOtAxG+T5^mxyEZie|FUZ;fRZUVw1==sv4NTEj`-vGD qsI+?S_)cmKa4N`;U>(8G-a}JALCY>Xvo8sAP>K)bkS?cMYJUJ&teKbq literal 692 zcmZuuO>fgc5Pjp=*~E34uTtDXfkImnzIs4hphBPmr?eb`kZ2Fp##vQc5<6ON_%XdB z&VbZPAinjTN2h9cJnSj+!WDC3 zD0NC$Z0&cBkIab1sIl+qVVU=%E z=37xMcI&WL024=r?L0>-{1U&xjZ@HjSBNUx;^ZfBYYlbwUFirO9~RhXc%6o~bMpj+ z-CJz#`yb#RqkenIe~Y=#2wt6{_|;)~6Rc%M1AHDFvNz8ps*G8~I@< Date: Tue, 11 Oct 2016 14:16:38 +0100 Subject: [PATCH 132/221] corrected an implementation problem with the initialisation of the index set --- src/goto-programs/pass_preprocess.cpp | 4 +- src/solvers/refinement/string_expr.cpp | 121 ++++++++++++++----- src/solvers/refinement/string_expr.h | 4 +- src/solvers/refinement/string_refinement.cpp | 62 +++++----- 4 files changed, 129 insertions(+), 62 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 1a6138202cc..cd35015de1d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -327,7 +327,9 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_long"); } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(F)Ljava/lang/String;")) { + ("java::java.lang.String.valueOf:(F)Ljava/lang/String;") + ||function_id == irep_idt + ("java::java.lang.Float.toString:(F)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, "__CPROVER_uninterpreted_string_of_float"); } else if(function_id == irep_idt diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index edf6d3ec47d..d7410b5e58f 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -10,7 +10,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include - +#include exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; @@ -100,7 +100,7 @@ string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map= index_zero); return s; @@ -264,7 +264,7 @@ void string_exprt::of_string_literal(const function_application_exprt &f, axiom_ } -void string_exprt::of_string_concat(const string_exprt & s1, const string_exprt & s2, std::map & symbol_to_string, axiom_vect & axioms) { +void string_exprt::of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms) { equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); @@ -288,7 +288,7 @@ void string_exprt::of_string_concat(const function_application_exprt &f, std::ma string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); - of_string_concat(s1, s2, symbol_to_string, axioms); + of_string_concat(s1, s2, axioms); } @@ -532,28 +532,85 @@ void string_exprt::of_float (const function_application_exprt &f,axiom_vect & axioms) { assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),11); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),false); } void string_exprt::of_float -(const exprt &f,axiom_vect & axioms, bool is_c_string, int max_size) +(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision) { - // Warning this is only a partial specification - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(max_size))); - - exprt char_0; - exprt char_9; - exprt char_dot; + // Warning: we currently only have partial specification + unsignedbv_typet char_type; + int char_width; if(is_c_string) { - char_0 = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_9 = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_dot = constant_of_nat(46,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - } else { - char_0 = constant_of_nat(48,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_9 = constant_of_nat(57,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_dot = constant_of_nat(46,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; } + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(24))); + + + string_exprt magnitude(char_type); + + // If the argument is NaN, the result is the string "NaN". + string_exprt nan_string(char_type); + nan_string.of_string_constant("NaN",char_width,char_type,axioms); + + ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); + + + exprt isnan = float_bvt().isnan(f,fspec); + axioms.emplace_back(isnan, equal_exprt(magnitude.length(),nan_string.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_nan", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) + ).forall(qvar,index_zero,nan_string.length())); + + // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. + + // Not sure this can distinguish between 0.0 and -0.0 + exprt isneg = + and_exprt + (not_exprt(isnan), + float_bvt().relation(f,float_bvt().LT,float_bvt().from_signed_integer(refined_string_typet::index_of_int(0),refined_string_typet::index_of_int(0),fspec),fspec)); + string_exprt sign_string(char_type); + axioms.emplace_back(isneg, equal_exprt(sign_string.length(),refined_string_typet::index_of_int(1))); + axioms.emplace_back(not_exprt(isneg), equal_exprt(sign_string.length(),refined_string_typet::index_of_int(0))); + axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_of_nat(0x2D,char_width,char_type))); + + + // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". + + string_exprt infinity_string(char_type); + infinity_string.of_string_constant("Infinity",char_width,char_type,axioms); + + + exprt isinf = false_exprt(); //float_bvt().isinf(f,fspec); + axioms.emplace_back(isinf, equal_exprt(magnitude.length(),infinity_string.length())); + symbol_exprt qvar_inf = string_exprt::fresh_symbol("qvar_equal_infinity", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) + ).forall(qvar_inf,index_zero,infinity_string.length())); + + + //of_string_concat(sign_string,magnitude,axioms); + + + /* Here is the remainder of the specification of Float.toString, for the magnitude m : + If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". + If m is greater than or equal to 10-3 but less than 107, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. + If m is less than 10^-3 or greater than or equal to 10^7, then it is represented in so-called "computerized scientific notation." Let n be the unique integer such that 10n ≤ m < 10n+1; then let a be the mathematically exact quotient of m and 10n so that 1 ≤ a < 10. The magnitude is then represented as the integer part of a, as a single decimal digit, followed by '.' ('\u002E'), followed by decimal digits representing the fractional part of a, followed by the letter 'E' ('\u0045'), followed by a representation of n as a decimal integer, as produced by the method Integer.toString(int). + + How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ + + + + exprt char_0 = constant_of_nat(48,char_width,char_type); + exprt char_9 = constant_of_nat(57,char_width,char_type); + exprt char_dot = constant_of_nat(46,char_width,char_type); + symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); exprt c = (*this)[idx]; exprt is_digit = @@ -562,14 +619,16 @@ void string_exprt::of_float equal_exprt(c,char_dot) ); string_constraintt a(is_digit); - axioms.push_back(a.forall(idx,index_zero,length())); + //axioms.push_back(a.forall(idx,index_zero,length())); + + } void string_exprt::of_double (const function_application_exprt &f,axiom_vect & axioms) { assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),20); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),true); } @@ -878,7 +937,7 @@ void string_exprt::of_string_delete string_exprt str2(refined_string_typet::get_char_type(str)); str1.of_string_substring(str,index_zero,start,symbol_to_string,axioms); str2.of_string_substring(str,end,str.length(),symbol_to_string,axioms); - of_string_concat(str1,str2,symbol_to_string,axioms); + of_string_concat(str1,str2,axioms); } @@ -898,7 +957,7 @@ void string_exprt::of_string_concat_int(const function_application_exprt &f, std string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -908,7 +967,7 @@ void string_exprt::of_string_concat_long(const function_application_exprt &f, st string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -917,7 +976,7 @@ void string_exprt::of_string_concat_bool(const function_application_exprt &f, st string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -926,7 +985,7 @@ void string_exprt::of_string_concat_char(const function_application_exprt &f, st string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -935,7 +994,7 @@ void string_exprt::of_string_concat_double(const function_application_exprt &f, string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -944,7 +1003,7 @@ void string_exprt::of_string_concat_float(const function_application_exprt &f, s string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ @@ -953,7 +1012,7 @@ void string_exprt::of_string_concat_code_point(const function_application_exprt string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); string_exprt s2(refined_string_typet::get_char_type(args[0])); s2.of_code_point(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,symbol_to_string,axioms); + of_string_concat(s1,s2,axioms); } void string_exprt::of_string_insert(const string_exprt & s1, const string_exprt & s2, @@ -968,8 +1027,8 @@ void string_exprt::of_string_insert(const string_exprt & s1, const string_exprt string_exprt concat1(char_type); pref.of_string_substring(s1,index_zero,offset,symbol_to_string,axioms); suf.of_string_substring(s1,offset,s1.length(),symbol_to_string,axioms); - concat1.of_string_concat(pref,s2,symbol_to_string,axioms); - of_string_concat(concat1,suf,symbol_to_string,axioms); + concat1.of_string_concat(pref,s2,axioms); + of_string_concat(concat1,suf,axioms); } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 34e68868e33..7d25d0b0fa3 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -77,7 +77,7 @@ class string_exprt : public struct_exprt { // Auxiliary functions for of_expr void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - void of_string_concat(const string_exprt & s1, const string_exprt & s2, std::map & symbol_to_string, axiom_vect & axioms); + void of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms); void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); void of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); @@ -120,7 +120,7 @@ class string_exprt : public struct_exprt { void of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); // Warning the specifications of these functions is only partial: void of_float(const function_application_exprt &f, axiom_vect & axioms); - void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, int max_size); + void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); void of_double(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index b12a9ece164..fdf8c81c207 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -92,7 +92,7 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str else assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); } - debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; + //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; } string_exprt string_refinementt::make_string(const exprt & str) @@ -288,24 +288,6 @@ void string_refinementt::print_time(std::string s) { // We add instantiations before launching the solver void string_refinementt::post_process() { - print_time("post_process"); - for(int i = 0; i < string_axioms.size(); i++) - if(string_axioms[i].is_simple()) - add_lemma(string_axioms[i]); - else if(string_axioms[i].is_string_constant()) - add_lemma(string_axioms[i]); //,false); - else if(string_axioms[i].is_univ_quant()) - universal_axioms.push_back(string_axioms[i]); - else { - assert(string_axioms[i].is_not_contains()); - string_axioms[i].witness = string_exprt::fresh_symbol - ("not_contains_witness", - array_typet(refined_string_typet::index_type(), - infinity_exprt(refined_string_typet::index_type()))); - not_contains_axioms.push_back(string_axioms[i]); - } - - string_axioms.clear(); /* debug() << not_contains_axioms.size() << " not_contains constraints" << eom; @@ -328,8 +310,27 @@ void string_refinementt::post_process() decision_proceduret::resultt string_refinementt::dec_solve() { - debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; + print_time("string_refinementt::dec_solve"); + for(int i = 0; i < string_axioms.size(); i++) + if(string_axioms[i].is_simple()) + add_lemma(string_axioms[i]); + else if(string_axioms[i].is_string_constant()) + add_lemma(string_axioms[i]); //,false); + else if(string_axioms[i].is_univ_quant()) + universal_axioms.push_back(string_axioms[i]); + else { + assert(string_axioms[i].is_not_contains()); + string_axioms[i].witness = string_exprt::fresh_symbol + ("not_contains_witness", + array_typet(refined_string_typet::index_type(), + infinity_exprt(refined_string_typet::index_type()))); + not_contains_axioms.push_back(string_axioms[i]); + } + + string_axioms.clear(); + initial_index_set(universal_axioms); + debug() << "string_refinementt::dec_solve: warning update_index_set has to be checked" << eom; update_index_set(cur); cur.clear(); add_instantiations(); @@ -1367,6 +1368,7 @@ bool string_refinementt::check_axioms() // Gets the upper bounds that are applied to [qvar], in the expression [expr] +/* Shouldn't be necessary with the new way string constraints are encoded void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) { std::vector to_treat; @@ -1386,7 +1388,7 @@ void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) } } } - +*/ std::map< exprt, int> string_refinementt::map_of_sum(const exprt &f) { @@ -1538,27 +1540,31 @@ void string_refinementt::update_index_set(const std::vector & cur) { void string_refinementt::initial_index_set(const string_constraintt &axiom) { assert(axiom.is_univ_quant()); - std::vector bounds; - get_bounds(axiom.get_univ_var(), axiom.premise(), bounds); - + symbol_exprt qvar = axiom.get_univ_var(); std::vector to_process; to_process.push_back(axiom.body()); + while (!to_process.empty()) { exprt cur = to_process.back(); to_process.pop_back(); if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - - bool has_quant_var = find_qvar(i,axiom.get_univ_var()); + + bool has_quant_var = find_qvar(i,qvar); // if cur is of the form s[i] and no quantified variable appears in i if(!has_quant_var){ - current_index_set[s].insert(bounds.begin(), bounds.end()); current_index_set[s].insert(i); - index_set[s].insert(bounds.begin(), bounds.end()); index_set[s].insert(i); + } else { + // otherwise we add k-1 + exprt e(i); + replace_expr(qvar,minus_exprt(axiom.univ_bound_sup(),refined_string_typet::index_of_int(1)),e); + current_index_set[s].insert(e); + index_set[s].insert(e); } + } else { forall_operands(it, cur) { to_process.push_back(*it); From 0fc6d296f42c03dd0fc1ecedbc7c339d5439ec54 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 10:05:46 +0100 Subject: [PATCH 133/221] partial specification for floats --- regression/strings/java_float/test.desc | 10 ++ .../strings/java_float/test_float.class | Bin 0 -> 1095 bytes regression/strings/java_float/test_float.java | 20 ++++ src/goto-programs/pass_preprocess.cpp | 7 +- src/solvers/refinement/string_expr.cpp | 102 ++++++++++++------ src/solvers/refinement/string_expr.h | 18 ++-- src/solvers/refinement/string_refinement.cpp | 51 ++++++--- src/solvers/refinement/string_refinement.h | 2 + 8 files changed, 153 insertions(+), 57 deletions(-) create mode 100644 regression/strings/java_float/test.desc create mode 100644 regression/strings/java_float/test_float.class create mode 100644 regression/strings/java_float/test_float.java diff --git a/regression/strings/java_float/test.desc b/regression/strings/java_float/test.desc new file mode 100644 index 00000000000..47e915cda98 --- /dev/null +++ b/regression/strings/java_float/test.desc @@ -0,0 +1,10 @@ +CORE +test_float.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_float.java line 14: SUCCESS$ +^\[assertion.2\] assertion at file test_float.java line 15: SUCCESS$ +^\[assertion.3\] assertion at file test_float.java line 16: SUCCESS$ +^\[assertion.4\] assertion at file test_float.java line 17: FAILURE$ +-- \ No newline at end of file diff --git a/regression/strings/java_float/test_float.class b/regression/strings/java_float/test_float.class new file mode 100644 index 0000000000000000000000000000000000000000..356d0e1787199536642df746eb1547fae54275f1 GIT binary patch literal 1095 zcmZuwZBNrs6n<{k_I9OXvp8TPf&#jMFctA-Lj{2)Mnn^giTJ^kt&n2ZV%wPzKj7bh zKY(Aw1dJx?XMdD>ZU;<+q`BwzoO7RZp6A^A>-X310LJl9#~Jj?n;!uAk61Q;0y-|@ zQW66g)G>t1Nu+T_LtaM#!yF?z+R(4zs)kXHF&#x*3PSq7aH|tJ9sXVDNwf@kD)XFYJSanXBAz`TP-d| zf#a=~#lh5KWL4ihvDV{!jvE}~4BBMXJ;2u&{YFr=D~>=*M|K#!UU7XZ8WV5^&LYck z)4&97aojd=2X{G22FjQ;V4{N>T(A}h)WAJZyWOoWrVpvj1%V$>(MR5jD7wLr9Bu9O zR!xov2Bt90kZHj@U0$=R5ovV_!()j})cxk$j0LyfXfzU1iCgw(KC;j!3Wn`7%eXvg=5nZ&Z zv6DuDZscfBsVoZ#oMInMY1T~4nQ~>|3zU*PC{|@itm-b*oVo`ttbAaV*lOFz=2SDe z2YnlD-_Z7QAI6Ve#D3XKo$6Q2_EY?Y1Dq}N<(enA2)miP)xs8Rq?k -void string_exprt::of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms) +void string_exprt::of_java_char_array(const exprt & char_array, axiom_vect & axioms) { - // this is not yet implemented - //std::cout << "of_java_char_array : " << char_array.pretty() << std::endl; - assert(false); + exprt arr = to_address_of_expr(char_array).object(); + exprt len = member_exprt(arr, "length",length().type()); + exprt cont = member_exprt(arr, "data",content().type()); + op0() = len; + op1() = cont; } -void string_exprt::of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) +void string_exprt::of_string_value_of(const function_application_exprt &f, axiom_vect & axioms) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - - exprt char_array = args[0]; - exprt offset = args[1]; - exprt count = args[2]; - string_exprt str(refined_string_typet::java_char_type()); - str.of_java_char_array(args[0],symbol_to_string,axioms); - axioms.emplace_back(equal_exprt(length(), count)); - - symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); - string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); - axioms.push_back(a1.forall(idx, index_zero, count)); + if(args.size() == 3) + { + exprt char_array = args[0]; + exprt offset = args[1]; + exprt count = args[2]; + string_exprt str(refined_string_typet::java_char_type()); + str.of_java_char_array(args[0],axioms); + axioms.emplace_back(equal_exprt(length(), count)); + + symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); + axioms.push_back(a1.forall(idx, index_zero, count)); + } + else + { + assert(args.size() == 1); + of_java_char_array(args[0],axioms); + } } void string_exprt::of_string_substring @@ -553,14 +560,14 @@ void string_exprt::of_float string_exprt magnitude(char_type); + string_exprt sign_string(char_type); // If the argument is NaN, the result is the string "NaN". string_exprt nan_string(char_type); nan_string.of_string_constant("NaN",char_width,char_type,axioms); ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); - - + exprt isnan = float_bvt().isnan(f,fspec); axioms.emplace_back(isnan, equal_exprt(magnitude.length(),nan_string.length())); symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_nan", refined_string_typet::index_type()); @@ -570,13 +577,12 @@ void string_exprt::of_float // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. - // Not sure this can distinguish between 0.0 and -0.0 - exprt isneg = - and_exprt - (not_exprt(isnan), - float_bvt().relation(f,float_bvt().LT,float_bvt().from_signed_integer(refined_string_typet::index_of_int(0),refined_string_typet::index_of_int(0),fspec),fspec)); - string_exprt sign_string(char_type); + const bitvector_typet &bv_type=to_bitvector_type(f.type()); + unsigned width=bv_type.get_width(); + exprt isneg = extractbit_exprt(f, width-1); + axioms.emplace_back(isneg, equal_exprt(sign_string.length(),refined_string_typet::index_of_int(1))); + axioms.emplace_back(not_exprt(isneg), equal_exprt(sign_string.length(),refined_string_typet::index_of_int(0))); axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_of_nat(0x2D,char_width,char_type))); @@ -585,28 +591,56 @@ void string_exprt::of_float string_exprt infinity_string(char_type); infinity_string.of_string_constant("Infinity",char_width,char_type,axioms); - - - exprt isinf = false_exprt(); //float_bvt().isinf(f,fspec); + exprt isinf = float_bvt().isinf(f,fspec); axioms.emplace_back(isinf, equal_exprt(magnitude.length(),infinity_string.length())); symbol_exprt qvar_inf = string_exprt::fresh_symbol("qvar_equal_infinity", refined_string_typet::index_type()); axioms.push_back (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) ).forall(qvar_inf,index_zero,infinity_string.length())); + //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". + + string_exprt zero_string(char_type); + zero_string.of_string_constant("0.0",char_width,char_type,axioms); + exprt iszero = float_bvt().is_zero(f,fspec); + axioms.emplace_back(iszero, equal_exprt(magnitude.length(),zero_string.length())); + symbol_exprt qvar_zero = string_exprt::fresh_symbol("qvar_equal_zero", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) + ).forall(qvar_zero,index_zero,zero_string.length())); - //of_string_concat(sign_string,magnitude,axioms); + + /* + ieee_floatt milli(fspec); + milli.from_float(0.001); + ieee_floatt decamega(fspec); + decamega.from_float(1e7); + exprt scientific = or_exprt + (float_bvt().relation(f,float_bvt().LT,milli.to_expr(),fspec), + float_bvt().relation(f,float_bvt().GE,decamega.to_expr(),fspec)); + */ + + // If m is greater than or equal to 10^-3 but less than 10^7, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. + + //string_exprt integer_part(char_type); + //exprt integer = float_bvt().to_integer(float_bvt.abs(f,fspec),32,true,fspec); + + //integer_part.of_int(integer); + //string_exprt dot_string(char_type); + //dot_string.of_string_constant(".",char_width,char_type,axioms); + //string_exprt fractional_part(char_type); /* Here is the remainder of the specification of Float.toString, for the magnitude m : - If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". - If m is greater than or equal to 10-3 but less than 107, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. + If m is less than 10^-3 or greater than or equal to 10^7, then it is represented in so-called "computerized scientific notation." Let n be the unique integer such that 10n ≤ m < 10n+1; then let a be the mathematically exact quotient of m and 10n so that 1 ≤ a < 10. The magnitude is then represented as the integer part of a, as a single decimal digit, followed by '.' ('\u002E'), followed by decimal digits representing the fractional part of a, followed by the letter 'E' ('\u0045'), followed by a representation of n as a decimal integer, as produced by the method Integer.toString(int). How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ + of_string_concat(sign_string,magnitude,axioms); + /* exprt char_0 = constant_of_nat(48,char_width,char_type); exprt char_9 = constant_of_nat(57,char_width,char_type); exprt char_dot = constant_of_nat(46,char_width,char_type); @@ -618,7 +652,7 @@ void string_exprt::of_float binary_relation_exprt(c,ID_le,char_9)), equal_exprt(c,char_dot) ); - string_constraintt a(is_digit); + string_constraintt a(is_digit);*/ //axioms.push_back(a.forall(idx,index_zero,length())); diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 7d25d0b0fa3..9c66e2d6ca6 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -107,7 +107,9 @@ class string_exprt : public struct_exprt { void of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); void of_string_replace(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_value_of(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + + // Warning: not working correctly at the moment + void of_string_value_of(const function_application_exprt &f, axiom_vect &axioms); void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); @@ -118,16 +120,18 @@ class string_exprt : public struct_exprt { void of_int_hex(const function_application_exprt &f,axiom_vect & axioms); void of_long(const function_application_exprt &f, axiom_vect & axioms); void of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); - // Warning the specifications of these functions is only partial: - void of_float(const function_application_exprt &f, axiom_vect & axioms); - void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); - void of_double(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const function_application_exprt &f, axiom_vect & axioms); void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); void of_char(const function_application_exprt &f, axiom_vect & axioms); void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); + + // Warning: the specifications of these functions is only partial: + void of_float(const function_application_exprt &f, axiom_vect & axioms); + void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); + void of_double(const function_application_exprt &f, axiom_vect & axioms); + void of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); - void of_java_char_array(const exprt & char_array, std::map & symbol_to_string, axiom_vect & axioms); + void of_java_char_array(const exprt & char_array, axiom_vect & axioms); void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); @@ -135,8 +139,6 @@ class string_exprt : public struct_exprt { friend inline string_exprt &to_string_expr(exprt &expr); -public: - exprt convert_string_equal(const function_application_exprt &f, axiom_vect & axioms); }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index fdf8c81c207..e4bb380934d 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -69,10 +69,24 @@ literalt string_refinementt::convert_rest(const exprt &expr) assert(bv.size() == 1); return bv[0]; } - else + else { + //debug() << "string_refinementt::convert_rest("<< pretty_short(expr) << ")" << eom; return SUB::convert_rest(expr); + } } +bvt string_refinementt::convert_pointer_type(const exprt &expr) +{ + if(expr.id()==ID_function_application) + { + bvt bv = convert_function_application(to_function_application_expr(expr)); + return bv; + } + else { + debug() << "string_refinementt::convert_pointer_type("<< pretty_short(expr) << ")" << eom; + return SUB::convert_pointer_type(expr); + } +} void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) { @@ -120,7 +134,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) auto duration = std::chrono::duration_cast(t1-start_time).count(); debug() << "string_refinementt::boolbv_set_equality_to_true " - //<< expr.pretty() << " at time(ms): " << (duration / 1000) << eom; @@ -133,19 +146,14 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { + debug() << " " << pretty_short(expr.lhs()) << " <- " + << pretty_short(expr.rhs()) << eom; + if(refined_string_typet::is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); make_string(sym,expr.rhs()); return false; } - /* - else if(refined_string_typet::is_java_deref_string_type(type)) { - debug() << "string_refinementt::boolbv_set_equality_to_true: warning" - << " non pointer string " << eom; - symbol_exprt sym = to_symbol_expr(expr.lhs()); - make_string(sym,expr.rhs()); - return false; - }*/ else if(type == char_type) { const bvt &bv1=convert_bv(expr.rhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); @@ -161,9 +169,21 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) map.set_literals(identifier, java_char_type, bv1); if(freeze_all) set_frozen(bv1); return false; - } - else { - return SUB::boolbv_set_equality_to_true(expr); + } + else if(type==ns.follow(expr.rhs().type())) { + if(is_unbounded_array(type)) + return true; + + const bvt &bv1=convert_bv(expr.rhs()); + + const irep_idt &identifier= + to_symbol_expr(expr.lhs()).get_identifier(); + + map.set_literals(identifier, type, bv1); + + if(freeze_all) set_frozen(bv1); + + return false; } } @@ -218,6 +238,7 @@ bvt string_refinementt::convert_function_application( const function_application_exprt &expr) { const exprt &name = expr.function(); + debug() << "string_refinementt::convert_function_application" << eom; if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); @@ -316,8 +337,10 @@ decision_proceduret::resultt string_refinementt::dec_solve() add_lemma(string_axioms[i]); else if(string_axioms[i].is_string_constant()) add_lemma(string_axioms[i]); //,false); - else if(string_axioms[i].is_univ_quant()) + else if(string_axioms[i].is_univ_quant()) { + debug() << "universaly quantified : " << pretty_short(string_axioms[i]) << eom; universal_axioms.push_back(string_axioms[i]); + } else { assert(string_axioms[i].is_not_contains()); string_axioms[i].witness = string_exprt::fresh_symbol diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 90fdca75fa3..1e7ab88671b 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -48,6 +48,8 @@ class string_refinementt: public bv_refinementt virtual bvt convert_symbol(const exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); + virtual bvt convert_pointer_type(const exprt &expr); + decision_proceduret::resultt dec_solve(); // fills as many 0 as necessary in the bit vectors to have the right width From 3c5b277a7df0d22eb9265865bf32811c097c6628 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 10:43:31 +0100 Subject: [PATCH 134/221] overapproximation of indexOf for strings as arguments --- regression/strings/java_index_of/test.desc | 1 + .../strings/java_index_of/test_index_of.class | Bin 980 -> 1060 bytes .../strings/java_index_of/test_index_of.java | 6 +++- src/goto-programs/pass_preprocess.cpp | 10 +++++-- src/solvers/refinement/string_refinement.cpp | 26 ++++++++++++++---- 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index 25e14e2d024..3c5ef119262 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -11,4 +11,5 @@ test_index_of.class ^\[assertion.6\] assertion at file test_index_of.java line 21: FAILURE$ ^\[assertion.7\] assertion at file test_index_of.java line 24: SUCCESS$ ^\[assertion.8\] assertion at file test_index_of.java line 25: FAILURE$ +^\[assertion.9\] assertion at file test_index_of.java line 29: SUCCESS$ -- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class index f56aeb29be8d0df7e7a3e5974600c17287f01a45..ffe81a9e1ac88a610fb90cf33bb42aae03b2cc4f 100644 GIT binary patch delta 674 zcmZXR!D|yy5XOHm+2rkRH<~6{+a#`SwbeFhy0*1J5X6hcgT1Jo*eAjR7<*&a#^?*g1E~f}= z&bf>+ZeYT|c>@=0Ce1tL;BirN$;BnmOuNib)71B_?^v^%#$GqPI!r;~-P&lkJL7Ae z?e_YF6g=h#JuVxVW8Osbid4H}(glyxAQLFGqHmqck4@>9X0WP!X&-c0QX_1*|631$;g;ox&dVv(vB(rQcX zR}`iuck2b+#ct|a&x)Bj#Mvhw=+_K=#(i+a(3gZd40O!9K2_^wVj4-I;9L0<>gR@x zc{b2z2l~u^`t@YWJzv3j!tN`baG}@X`O<5%$ y6e^`ksa!0IpOxcNEG3>xv540tw~w|CuxjZKID@VFhcUA=q;faR`Krm%Xa53yLvHy1 delta 597 zcmZXRy-yoK5XFCM-+9mHbMR;I2Tlwag3s7ah$twCTp=oiQiRY^K!LCXLg`6GkFE+x z$rX{(CPV@WB&VkiE&L}*W)CHfM-F_YTlekQ2rd=GWnuf~^vzlioEAOm1P4i^X?TnF8c&j`8{(gO9|FFM3DG3jsmdCsS zpSFnv(mV=gR6Eh}=<+;xt9F80weZ?Z04h^50*T@%q^n?7ZZ$cToVI_7`euaW1QQXd zNRp=@u}IaHlxoS{2b;0Rkw36Pn&;?KGBy2))HTlLCCMKV^|7WyKK!NpfgRG061k$4 z8Bre?GGuqCPYm_;sJ>UUS53jvut09D=m*(iVx+&}!r_Ew%~-VN8u?%=UOh^QjULP5 z(7Jf@M%>wxmEX(q$FlwzMZPl51to4Mb4OJe1fAbfq&1H<= plus_exprt(substring.length(),offset), + binary_relation_exprt(offset,ID_ge,from_index))); + string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] + symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); + string_axioms.push_back + (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) + ).forall(qvar,zero,substring.length())); + + + debug() << "string_refinementt::convert_string_index_of_string : warning the stpecification is only partial" << eom; + + return offset; + } From 9df15f3b1d5ac31f75cffc9c272fb53434ee35dd Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 11:12:25 +0100 Subject: [PATCH 135/221] overapproximation of lastIndexOf for strings as arguments --- regression/strings/java_index_of/test.desc | 19 ++++----- .../strings/java_index_of/test_index_of.class | Bin 1060 -> 1108 bytes .../strings/java_index_of/test_index_of.java | 4 +- src/goto-programs/pass_preprocess.cpp | 4 ++ src/solvers/refinement/string_refinement.cpp | 38 ++++++++++++++---- src/solvers/refinement/string_refinement.h | 1 + 6 files changed, 47 insertions(+), 19 deletions(-) diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index 3c5ef119262..74e2a776e10 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -3,13 +3,14 @@ test_index_of.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_index_of.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_index_of.java line 13: FAILURE$ -^\[assertion.3\] assertion at file test_index_of.java line 16: SUCCESS$ -^\[assertion.4\] assertion at file test_index_of.java line 17: FAILURE$ -^\[assertion.5\] assertion at file test_index_of.java line 20: SUCCESS$ -^\[assertion.6\] assertion at file test_index_of.java line 21: FAILURE$ -^\[assertion.7\] assertion at file test_index_of.java line 24: SUCCESS$ -^\[assertion.8\] assertion at file test_index_of.java line 25: FAILURE$ -^\[assertion.9\] assertion at file test_index_of.java line 29: SUCCESS$ +^\[assertion.1\] assertion at file test_index_of.java line 13: SUCCESS$ +^\[assertion.2\] assertion at file test_index_of.java line 14: FAILURE$ +^\[assertion.3\] assertion at file test_index_of.java line 17: SUCCESS$ +^\[assertion.4\] assertion at file test_index_of.java line 18: FAILURE$ +^\[assertion.5\] assertion at file test_index_of.java line 21: SUCCESS$ +^\[assertion.6\] assertion at file test_index_of.java line 22: FAILURE$ +^\[assertion.7\] assertion at file test_index_of.java line 23: SUCCESS$ +^\[assertion.8\] assertion at file test_index_of.java line 26: FAILURE$ +^\[assertion.9\] assertion at file test_index_of.java line 28: SUCCESS$ +^\[assertion.10\] assertion at file test_index_of.java line 29: SUCCESS$ -- diff --git a/regression/strings/java_index_of/test_index_of.class b/regression/strings/java_index_of/test_index_of.class index ffe81a9e1ac88a610fb90cf33bb42aae03b2cc4f..8b3b7525f1a39da925f03e97b1803fa5b624b58a 100644 GIT binary patch delta 692 zcmZXRO=}ZT6o#KWndHt)CN;@q+9Y=RrB$0WHk!76fZ$4m(oHwoja2Y!5eSGo7x@c@ zfJisaLU7T7sL(OI_5r#7%-7Czu@ zlaKUkvWH|h_whd^)KR2kz6`0_ARW_43dPXQpHROtWK3_Q&y4ixWBP7#%ac&pnERs! z$?8d|5N1x?e@(cU)=>Rdr)8+)Qx`(#f6mxqCAQoXGr$%j`j1oPZkAYnu?~X{(MlZma3&n5Ck}! p{ZEHaDlyuNeh-0%EwUOD%^{rS`fmbv9|iO}Jy zM};W^(*|Y?%sN~%w(8qk=pOxcA~Lg>st{EXSgS1LVe2EXT0@u#=gX< zvrtF88Ki1`JE9pEa)Ff@VIP=e#NLpf8uIN?{%T-vn1+YL28rtN53)gOWPVk05tRY^ zKTpe27h9XBC*r3+Cg>d|EBk4dM7g`7+M4LKDT+N88D5AWM>Fbnv#k?$dwD_LMfjY4a*nuuf#e_F^~U&^a= plus_exprt(substring.length(),offset), + binary_relation_exprt(offset,ID_le,from_index))); + string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] + symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); + string_axioms.push_back + (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) + ).forall(qvar,zero,substring.length())); + debug() << "string_refinementt::convert_string_last_index_of_string : warning the stpecification is only partial" << eom; + return offset; } @@ -803,7 +822,6 @@ exprt string_refinementt::convert_string_index_of( exprt c = args[1]; exprt from_index; - if(args.size() == 2) from_index = zero; else if (args.size() == 3) from_index = args[2]; else assert(false); @@ -853,17 +871,21 @@ exprt string_refinementt::convert_string_last_index_of( exprt c = args[1]; exprt from_index; - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); - } - if(args.size() == 2) from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); else if (args.size() == 3) from_index = args[2]; else assert(false); - return convert_string_last_index_of(str,c,from_index); + if(refined_string_typet::is_java_string_type(c.type())){ + string_exprt sub = make_string(c); + return convert_string_last_index_of_string(str,sub,from_index); + } else { + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + return convert_string_last_index_of(str,c,from_index); + } } bvt string_refinementt::convert_char_literal( diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 1e7ab88671b..07334e19d96 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -68,6 +68,7 @@ class string_refinementt: public bv_refinementt exprt convert_string_hash_code(const function_application_exprt &f); exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); exprt convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); exprt convert_string_index_of(const function_application_exprt &f); exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); exprt convert_string_last_index_of(const function_application_exprt &f); From ad4ec553445a80f4ace3420da0f6445faf75437d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 11:23:36 +0100 Subject: [PATCH 136/221] corrected tests for IndexOf --- regression/strings/java_compare/test_compare.java | 4 ++-- regression/strings/java_index_of/test.desc | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/regression/strings/java_compare/test_compare.java b/regression/strings/java_compare/test_compare.java index 8c1d4b71a0c..fe060a97d1e 100644 --- a/regression/strings/java_compare/test_compare.java +++ b/regression/strings/java_compare/test_compare.java @@ -11,8 +11,8 @@ public static void main(String[] argv) { assert(s3.hashCode() == s1.hashCode()); assert(s3.hashCode() == s2.hashCode()); - /*String x = s1.intern(); + String x = s1.intern(); String y = s3.intern(); - assert(x == y);*/ + assert(x == y); } } diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index 74e2a776e10..dd5c60464d5 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -9,7 +9,7 @@ test_index_of.class ^\[assertion.4\] assertion at file test_index_of.java line 18: FAILURE$ ^\[assertion.5\] assertion at file test_index_of.java line 21: SUCCESS$ ^\[assertion.6\] assertion at file test_index_of.java line 22: FAILURE$ -^\[assertion.7\] assertion at file test_index_of.java line 23: SUCCESS$ +^\[assertion.7\] assertion at file test_index_of.java line 25: SUCCESS$ ^\[assertion.8\] assertion at file test_index_of.java line 26: FAILURE$ ^\[assertion.9\] assertion at file test_index_of.java line 28: SUCCESS$ ^\[assertion.10\] assertion at file test_index_of.java line 29: SUCCESS$ From c814f13da48144208ed22570a6fc18a293f84755 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 16:59:41 +0100 Subject: [PATCH 137/221] simplification of the code for string functions identifiers --- .../strings/java_compare/test_compare.java | 4 +- src/goto-programs/pass_preprocess.cpp | 129 +++++----- src/solvers/refinement/string_expr.cpp | 147 ++++++++--- src/solvers/refinement/string_expr.h | 2 + src/solvers/refinement/string_functions.cpp | 238 +----------------- src/solvers/refinement/string_functions.h | 122 +++++---- src/solvers/refinement/string_refinement.cpp | 70 +++--- 7 files changed, 276 insertions(+), 436 deletions(-) diff --git a/regression/strings/java_compare/test_compare.java b/regression/strings/java_compare/test_compare.java index fe060a97d1e..8c1d4b71a0c 100644 --- a/regression/strings/java_compare/test_compare.java +++ b/regression/strings/java_compare/test_compare.java @@ -11,8 +11,8 @@ public static void main(String[] argv) { assert(s3.hashCode() == s1.hashCode()); assert(s3.hashCode() == s2.hashCode()); - String x = s1.intern(); + /*String x = s1.intern(); String y = s3.intern(); - assert(x == y); + assert(x == y);*/ } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index fef5a23117c..b67edede518 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,7 +14,7 @@ Date: September 2016 #include "pass_preprocess.h" -#include // only for debugging +#include #include void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, @@ -27,7 +27,6 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f auxiliary_symbolt tmp_symbol; //tmp_symbol.base_name=base_name; - //tmp_symbol.base_name=base_name; tmp_symbol.is_static_lifetime=false; tmp_symbol.mode=ID_java; tmp_symbol.name=function_name; @@ -104,7 +103,7 @@ void make_string_function_side_effect (symbol_tablet & symbol_table, goto_functionst & goto_functions, goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name, std::map & string_builders){ - // replace "s.append(x)" by "s=__CPROVER_uninterpreted_strcat(s,x)" + // replace "s.append(x)" by "s=__CPROVER_uninterpreted_string_concat(s,x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -176,18 +175,18 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") ) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_char_at"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_char_at_func); } else if(function_id == irep_idt("java::java.lang.String.codePointAt:(I)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_at_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_at_func); } else if(function_id == irep_idt("java::java.lang.String.codePointBefore:(I)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_before_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_before_func); } else if(function_id == irep_idt("java::java.lang.String.codePointCount:(II)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_code_point_count_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_count_func); } else if(function_id == irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_offset_by_code_point_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_offset_by_code_point_func); } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_hash_code_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_hash_code_func); } else if(function_id == irep_idt ("java::java.lang.String.indexOf:(I)I") @@ -198,7 +197,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt ("java::java.lang.String.indexOf:(Ljava/lang/String;I)I") ) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strindexof"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_index_of_func); } else if(function_id == irep_idt ("java::java.lang.String.lastIndexOf:(I)I") || function_id == irep_idt @@ -208,170 +207,172 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt ("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I") ) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlastindexof"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_last_index_of_func); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcat_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_concat_func); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_length_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strlen"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_length_func); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equal_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_equal_func); } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_equals_ignore_case"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_equals_ignore_case_func); } else if(function_id == irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;)Z") || function_id == irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z") ) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_startswith"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_startswith_func); } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_endswith"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_endswith_func); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_substring_func); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") ) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_substring"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_substring_func); } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_trim"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_trim_func); } else if(function_id == irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_lower_case"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_lower_case_func); } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_upper_case"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_upper_case_func); } else if(function_id == irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_replace_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_replace_func); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_strcontains"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_contains_func); } else if(function_id == irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_compare_to_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_compare_to_func); } else if(function_id == irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_intern_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_intern_func); } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_is_empty"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_is_empty_func); } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { - make_string_function(symbol_table, goto_functions, i_it,"__CPROVER_uninterpreted_string_to_char_array_func"); + make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_char_array_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_int_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_int_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_long_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_long_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_bool_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_bool_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_char_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_char_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_double_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_double_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_float_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_float_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,"__CPROVER_uninterpreted_strcat_code_point_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_code_point_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_delete_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_delete_char_at_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_delete_char_at_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_int_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_int_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_long_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_long_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_char_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_char_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,"__CPROVER_uninterpreted_string_insert_bool_func",string_builders); + make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_bool_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.setCharAt:(IC)V")) { // warning: this should return void type make_string_function_side_effect (symbol_table, goto_functions, goto_program, i_it, - "__CPROVER_uninterpreted_string_char_set_func",string_builders); + cprover_string_char_set_func,string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_copy"); + cprover_string_copy_func); } else if(function_id == irep_idt ("java::java.lang.String.:(Ljava/lang/String;)V") || function_id == irep_idt ("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")) { make_string_function_call(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_copy"); + cprover_string_copy_func); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { make_string_function_call(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_copy"); + cprover_string_copy_func); } else if(function_id == irep_idt("java::java.lang.String.:()V")) { make_string_function_call(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_empty_string"); + cprover_string_empty_string_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { make_string_function_call(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_empty_string"); + cprover_string_empty_string_func); } else if(function_id == irep_idt ("java::java.lang.Integer.toString:(I)Ljava/lang/String;") || function_id == irep_idt ("java::java.lang.String.valueOf:(I)Ljava/lang/String;") ) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_int_func"); + cprover_string_of_int_func); } else if(function_id == irep_idt ("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_int_hex_func"); + cprover_string_of_int_hex_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_long"); + cprover_string_of_long_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(F)Ljava/lang/String;") ||function_id == irep_idt ("java::java.lang.Float.toString:(F)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_float"); + cprover_string_of_float_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(D)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_double"); + cprover_string_of_double_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_bool"); + cprover_string_of_bool_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(C)Ljava/lang/String;")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_of_char_func"); + cprover_string_of_char_func); } else if(function_id == irep_idt ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_parse_int"); + cprover_string_parse_int_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:([CII)Ljava/lang/String;") ||function_id == irep_idt ("java::java.lang.String.valueOf:([C)Ljava/lang/String;") ) { make_string_function(symbol_table, goto_functions, i_it, - "__CPROVER_uninterpreted_string_value_of"); + cprover_string_value_of_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.setLength:(I)V")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it, - "__CPROVER_uninterpreted_string_set_length",string_builders); - + cprover_string_set_length_func,string_builders); + } else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) { + make_string_function(symbol_table, goto_functions, i_it, + cprover_string_format_func); } } @@ -398,13 +399,13 @@ exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & got function_application_exprt rhs; rhs.type()=expr.type(); rhs.add_source_location()=expr.source_location(); - rhs.function()=symbol_exprt("__CPROVER_uninterpreted_string_literal"); - goto_functions.function_map[irep_idt("__CPROVER_uninterpreted_string_literal")]; + rhs.function()=symbol_exprt(cprover_string_literal_func); + goto_functions.function_map[cprover_string_literal_func]; rhs.arguments().push_back(address_of_exprt(expr.op0())); auxiliary_symbolt tmp_symbol; tmp_symbol.is_static_lifetime=false; tmp_symbol.mode=ID_java; - tmp_symbol.name="__CPROVER_uninterpreted_string_literal"; + tmp_symbol.name=cprover_string_literal_func; symbol_table.add(tmp_symbol); return rhs; } diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 086b558c278..adebbf5bac0 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -11,10 +11,10 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include + exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; - symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, const typet &tp) { @@ -111,77 +111,79 @@ void string_exprt::of_function_application(const function_application_exprt & ex const exprt &name = expr.function(); if (name.id() == ID_symbol) { const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (is_string_literal_func(id)) { - return of_string_literal(expr,axioms); - } else if (is_string_concat_func(id)) { + if(starts_with(id,cprover_string_literal_func)) + return of_string_literal(expr,axioms); + else if(starts_with(id,cprover_string_concat_func)) return of_string_concat(expr,symbol_to_string,axioms); - } else if (is_string_concat_int_func(id)) { + else if(starts_with(id,cprover_string_concat_int_func)) return of_string_concat_int(expr,symbol_to_string,axioms); - } else if (is_string_concat_long_func(id)) { + else if(starts_with(id,cprover_string_concat_long_func)) return of_string_concat_long(expr,symbol_to_string,axioms); - } else if (is_string_concat_bool_func(id)) { + else if(starts_with(id,cprover_string_concat_bool_func)) return of_string_concat_bool(expr,symbol_to_string,axioms); - } else if (is_string_concat_char_func(id)) { + else if(starts_with(id,cprover_string_concat_char_func)) return of_string_concat_char(expr,symbol_to_string,axioms); - } else if (is_string_concat_double_func(id)) { + else if(starts_with(id,cprover_string_concat_double_func)) return of_string_concat_double(expr,symbol_to_string,axioms); - } else if (is_string_concat_float_func(id)) { + else if(starts_with(id,cprover_string_concat_float_func)) return of_string_concat_float(expr,symbol_to_string,axioms); - } else if (is_string_concat_code_point_func(id)) { + else if(starts_with(id,cprover_string_concat_code_point_func)) return of_string_concat_code_point(expr,symbol_to_string,axioms); - } else if (is_string_insert_func(id)) { + else if(starts_with(id,cprover_string_insert_func)) return of_string_insert(expr,symbol_to_string,axioms); - } else if (is_string_insert_int_func(id)) { + else if(starts_with(id,cprover_string_insert_int_func)) return of_string_insert_int(expr,symbol_to_string,axioms); - } else if (is_string_insert_long_func(id)) { + else if(starts_with(id,cprover_string_insert_long_func)) return of_string_insert_long(expr,symbol_to_string,axioms); - } else if (is_string_insert_bool_func(id)) { + else if(starts_with(id,cprover_string_insert_bool_func)) return of_string_insert_bool(expr,symbol_to_string,axioms); - } else if (is_string_insert_char_func(id)) { + else if(starts_with(id,cprover_string_insert_char_func)) return of_string_insert_char(expr,symbol_to_string,axioms); - } else if (is_string_insert_double_func(id)) { + else if(starts_with(id,cprover_string_insert_double_func)) return of_string_insert_double(expr,symbol_to_string,axioms); - } else if (is_string_insert_float_func(id)) { + else if(starts_with(id,cprover_string_insert_float_func)) return of_string_insert_float(expr,symbol_to_string,axioms); - } else if (is_string_substring_func(id)) { + else if(starts_with(id,cprover_string_substring_func)) return of_string_substring(expr,symbol_to_string,axioms); - } else if (is_string_trim_func(id)) { + else if(starts_with(id,cprover_string_trim_func)) return of_string_trim(expr,symbol_to_string,axioms); - } else if (is_string_to_lower_case_func(id)) { + else if(starts_with(id,cprover_string_to_lower_case_func)) return of_string_to_lower_case(expr,symbol_to_string,axioms); - } else if (is_string_to_upper_case_func(id)) { + else if(starts_with(id,cprover_string_to_upper_case_func)) return of_string_to_upper_case(expr,symbol_to_string,axioms); - } else if (is_string_char_set_func(id)) { + else if(starts_with(id,cprover_string_char_set_func)) return of_string_char_set(expr,symbol_to_string,axioms); - } else if (is_string_value_of_func(id)) { + else if(starts_with(id,cprover_string_value_of_func)) return of_string_value_of(expr,axioms); - } else if (is_string_empty_string_func(id)) { + else if(starts_with(id,cprover_string_empty_string_func)) return of_empty_string(expr,axioms); - } else if (is_string_copy_func(id)) { + else if(starts_with(id,cprover_string_copy_func)) return of_string_copy(expr,symbol_to_string,axioms); - } else if (is_string_of_int_func(id)) { + else if(starts_with(id,cprover_string_of_int_func)) return of_int(expr,axioms); - } else if (is_string_of_int_hex_func(id)) { + else if(starts_with(id,cprover_string_of_int_hex_func)) return of_int_hex(expr,axioms); - } else if (is_string_of_float_func(id)) { + else if(starts_with(id,cprover_string_of_float_func)) return of_float(expr,axioms); - } else if (is_string_of_double_func(id)) { + else if(starts_with(id,cprover_string_of_double_func)) return of_double(expr,axioms); - } else if (is_string_of_long_func(id)) { + else if(starts_with(id,cprover_string_of_long_func)) return of_long(expr,axioms); - } else if (is_string_of_bool_func(id)) { + else if(starts_with(id,cprover_string_of_bool_func)) return of_bool(expr,axioms); - } else if (is_string_of_char_func(id)) { + else if(starts_with(id,cprover_string_of_char_func)) return of_char(expr,axioms); - } else if (is_string_set_length_func(id)) { + else if(starts_with(id,cprover_string_set_length_func)) return of_string_set_length(expr,symbol_to_string,axioms); - } else if (is_string_delete_func(id)) { + else if(starts_with(id,cprover_string_delete_func)) return of_string_delete(expr,symbol_to_string,axioms); - } else if (is_string_delete_char_at_func(id)) { + else if(starts_with(id,cprover_string_delete_char_at_func)) return of_string_delete_char_at(expr,symbol_to_string,axioms); - } else if (is_string_replace_func(id)) { + else if(starts_with(id,cprover_string_replace_func)) return of_string_replace(expr,symbol_to_string,axioms); - } else { + else if(starts_with(id,cprover_string_format_func)) + return of_string_format(expr,symbol_to_string,axioms); + else { std::string msg("string_exprt::of_function_application: unknown symbol :"); msg+=id.c_str(); throw msg; @@ -1119,7 +1121,8 @@ void string_exprt::of_string_insert_double(const function_application_exprt &f, of_string_insert(s1,s2,args[1],symbol_to_string,axioms); } -void string_exprt::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ +void string_exprt::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms) +{ const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 3); string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); @@ -1129,3 +1132,69 @@ void string_exprt::of_string_insert_float(const function_application_exprt &f, s } +#include + +void string_exprt::of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + // warning this is right now only for java: + bool is_c_string = false; + unsignedbv_typet char_type = is_c_string?refined_string_typet::char_type():refined_string_typet::java_char_type(); + size_t char_width = is_c_string?STRING_SOLVER_CHAR_WIDTH:JAVA_STRING_SOLVER_CHAR_WIDTH; + + if(args.size() == 2) + { + + // Warning: this is not very clean: + irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); + std::string format_string = id2string(literal); + std::cout << "string_exprt::of_string_format " << format_string << std::endl; + size_t position = format_string.find_first_of('%'); + std::vector strings; + int arg_counter = 0; + + string_exprt begin(char_type); + begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); + strings.push_back(begin); + + while(position != std::string::npos) + { + std::cout << "string format: position = " << position << std::endl; + switch(format_string[position+1]) { + case 'd' : + { + string_exprt str(char_type); + str.of_int(/*index_exprt(args[1],refined_string_typet::index_of_int(arg_counter++))*/args[++arg_counter],axioms,is_c_string,10); + std::cout << "argument : " << args[arg_counter].pretty() << std::endl; + strings.push_back(str); + break; + } + + default: + { + std::cout << "warning: unknown string format: " << format_string << std::endl; + break; + } + } + size_t new_position = format_string.find_first_of('%',position+2); + if(new_position != std::string::npos) { + string_exprt str(char_type); + str.of_string_constant(format_string.substr(position+2,new_position),char_width,char_type,axioms); + strings.push_back(str); + } + position = new_position; + } + + + string_exprt * concatenation = &strings[0]; + int i; + for(i = 1; i < strings.size() - 1; i++) + { + string_exprt str(refined_string_typet::java_char_type()); + str.of_string_concat(*concatenation,strings[i],axioms); + concatenation = &str; + } + + of_string_concat(*concatenation,strings[i],axioms); + } + +} diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 9c66e2d6ca6..052469b4d34 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -112,6 +112,8 @@ class string_exprt : public struct_exprt { void of_string_value_of(const function_application_exprt &f, axiom_vect &axioms); void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); + void of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); + void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); void of_int(const function_application_exprt &f, axiom_vect & axioms); diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index 0b2eb582abd..f3383f436f0 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -7,243 +7,13 @@ Author: Romain Brenguier Date: September 2016 \*******************************************************************/ -#include - - -#define char_literal_func "__CPROVER_uninterpreted_char_literal" -#define string_equal_func "__CPROVER_uninterpreted_string_equal_func" -#define string_char_at_func "__CPROVER_uninterpreted_char_at" -#define string_code_point_at_func "__CPROVER_uninterpreted_string_code_point_at_func" -#define string_code_point_before_func "__CPROVER_uninterpreted_string_code_point_before_func" -#define string_code_point_count_func "__CPROVER_uninterpreted_string_code_point_count_func" -#define string_code_point_offset_by_code_point_func "__CPROVER_uninterpreted_string_offset_by_code_point_func" -#define string_compare_to_func "__CPROVER_uninterpreted_string_compare_to_func" -#define string_concat_func "__CPROVER_uninterpreted_strcat_func" -#define string_concat_int_func "__CPROVER_uninterpreted_strcat_int_func" -#define string_concat_long_func "__CPROVER_uninterpreted_strcat_long_func" -#define string_concat_char_func "__CPROVER_uninterpreted_strcat_char_func" -#define string_concat_bool_func "__CPROVER_uninterpreted_strcat_bool_func" -#define string_concat_float_func "__CPROVER_uninterpreted_strcat_float_func" -#define string_concat_double_func "__CPROVER_uninterpreted_strcat_double_func" -#define string_concat_code_point_func "__CPROVER_uninterpreted_strcat_code_point_func" -#define string_contains_func "__CPROVER_uninterpreted_strcontains" -#define string_char_set_func "__CPROVER_uninterpreted_string_char_set_func" -#define string_copy_func "__CPROVER_uninterpreted_string_copy" -#define string_delete_func "__CPROVER_uninterpreted_string_delete_func" -#define string_delete_char_at_func "__CPROVER_uninterpreted_string_delete_char_at_func" -#define string_empty_string_func "__CPROVER_uninterpreted_empty_string" -#define string_endswith_func "__CPROVER_uninterpreted_string_endswith" -#define string_equals_ignore_case_func "__CPROVER_uninterpreted_string_equals_ignore_case" -#define string_hash_code_func "__CPROVER_uninterpreted_string_hash_code_func" -#define string_index_of_func "__CPROVER_uninterpreted_strindexof" -#define string_insert_func "__CPROVER_uninterpreted_string_insert_func" -#define string_insert_int_func "__CPROVER_uninterpreted_string_insert_int_func" -#define string_insert_long_func "__CPROVER_uninterpreted_string_insert_long_func" -#define string_insert_bool_func "__CPROVER_uninterpreted_string_insert_bool_func" -#define string_insert_char_func "__CPROVER_uninterpreted_string_insert_char_func" -#define string_insert_float_func "__CPROVER_uninterpreted_string_insert_float_func" -#define string_insert_double_func "__CPROVER_uninterpreted_string_insert_double_func" -#define string_intern_func "__CPROVER_uninterpreted_string_intern_func" -#define string_is_prefix_func "__CPROVER_uninterpreted_strprefixof" -#define string_is_suffix_func "__CPROVER_uninterpreted_strsuffixof" -#define string_is_empty_func "__CPROVER_uninterpreted_string_is_empty" -#define string_last_index_of_func "__CPROVER_uninterpreted_strlastindexof" -#define string_literal_func "__CPROVER_uninterpreted_string_literal" -#define string_length_func "__CPROVER_uninterpreted_strlen" -#define string_of_int_func "__CPROVER_uninterpreted_string_of_int_func" -#define string_of_int_hex_func "__CPROVER_uninterpreted_string_of_int_hex_func" -#define string_of_long_func "__CPROVER_uninterpreted_string_of_long" -#define string_of_bool_func "__CPROVER_uninterpreted_string_of_bool" -#define string_of_float_func "__CPROVER_uninterpreted_string_of_float" -#define string_of_double_func "__CPROVER_uninterpreted_string_of_double" -#define string_of_char_func "__CPROVER_uninterpreted_string_of_char_func" -#define string_replace_func "__CPROVER_uninterpreted_string_replace_func" -#define string_substring_func "__CPROVER_uninterpreted_substring" -#define string_startswith_func "__CPROVER_uninterpreted_string_startswith" -#define string_to_char_array_func "__CPROVER_uninterpreted_string_to_char_array_func" -#define string_parse_int_func "__CPROVER_uninterpreted_parse_int" -#define string_trim_func "__CPROVER_uninterpreted_string_trim" -#define string_to_lower_case_func "__CPROVER_uninterpreted_string_to_lower_case" -#define string_to_upper_case_func "__CPROVER_uninterpreted_string_to_upper_case" -#define string_value_of_func "__CPROVER_uninterpreted_string_value_of" -#define string_set_length_func "__CPROVER_uninterpreted_string_set_length" +#include -bool starts_with(std::string s, std::string t) { +bool starts_with(irep_idt id, irep_idt prefix) { + std::string s = id2string(id); + std::string t = id2string(prefix); for(int i = 0; i < t.length(); i++) if(s[i] != t[i]) return false; return true; } - -bool is_string_literal_func(irep_idt id) { - return (starts_with(id2string(id),string_literal_func)); -} - -bool is_char_literal_func(irep_idt id) { - return (starts_with(id2string(id),char_literal_func)); -} -bool is_string_length_func(irep_idt id) { - return (starts_with(id2string(id),string_length_func)); -} -bool is_string_equal_func(irep_idt id) { - return (starts_with(id2string(id),string_equal_func)); -} -bool is_string_char_at_func(irep_idt id) { - return (starts_with(id2string(id),string_char_at_func)); -} -bool is_string_concat_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_func)); -} -bool is_string_concat_int_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_int_func)); -} -bool is_string_concat_long_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_long_func)); -} -bool is_string_concat_char_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_char_func)); -} -bool is_string_concat_bool_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_bool_func)); -} -bool is_string_concat_float_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_float_func)); -} -bool is_string_concat_double_func(irep_idt id) { - return (starts_with(id2string(id),string_concat_double_func)); -} -bool is_string_substring_func(irep_idt id) { - return (starts_with(id2string(id),string_substring_func)); -} -bool is_string_is_prefix_func(irep_idt id) { - return (starts_with(id2string(id),string_is_prefix_func)); -} -bool is_string_is_suffix_func(irep_idt id) { - return (starts_with(id2string(id),string_is_suffix_func)); -} -bool is_string_startswith_func(irep_idt id) { - return (starts_with(id2string(id),string_startswith_func)); -} -bool is_string_endswith_func(irep_idt id) { - return (starts_with(id2string(id),string_endswith_func)); -} -bool is_string_contains_func(irep_idt id) { - return (starts_with(id2string(id),string_contains_func)); -} -bool is_string_char_set_func(irep_idt id) { - return (starts_with(id2string(id),string_char_set_func)); -} -bool is_string_index_of_func(irep_idt id) { - return (starts_with(id2string(id),string_index_of_func)); -} -bool is_string_copy_func(irep_idt id) { - return (starts_with(id2string(id),string_copy_func)); -} -bool is_string_last_index_of_func(irep_idt id) { - return (starts_with(id2string(id),string_last_index_of_func)); -} -bool is_string_empty_string_func(irep_idt id) { - return (starts_with(id2string(id),string_empty_string_func)); -} -bool is_string_parse_int_func(irep_idt id) { - return (starts_with(id2string(id),string_parse_int_func)); -} -bool is_string_of_int_func(irep_idt id) { - return (starts_with(id2string(id),string_of_int_func)); -} -bool is_string_of_int_hex_func(irep_idt id) { - return (starts_with(id2string(id),string_of_int_hex_func)); -} -bool is_string_of_long_func(irep_idt id) { - return (starts_with(id2string(id),string_of_int_func)); -} -bool is_string_of_bool_func(irep_idt id){ - return (starts_with(id2string(id),string_of_bool_func)); -} -bool is_string_of_float_func(irep_idt id){ - return (starts_with(id2string(id),string_of_float_func)); -} -bool is_string_of_double_func(irep_idt id){ - return (starts_with(id2string(id),string_of_double_func)); -} -bool is_string_of_char_func(irep_idt id){ - return (starts_with(id2string(id),string_of_char_func)); -} -bool is_string_equals_ignore_case_func(irep_idt id){ - return (starts_with(id2string(id),string_equals_ignore_case_func)); -} -bool is_string_trim_func(irep_idt id){ - return (starts_with(id2string(id),string_trim_func)); -} -bool is_string_to_lower_case_func(irep_idt id){ - return (starts_with(id2string(id),string_to_lower_case_func)); -} -bool is_string_to_upper_case_func(irep_idt id){ - return (starts_with(id2string(id),string_to_upper_case_func)); -} -bool is_string_is_empty_func(irep_idt id){ - return (starts_with(id2string(id),string_is_empty_func)); -} -bool is_string_value_of_func(irep_idt id){ - return (starts_with(id2string(id),string_value_of_func)); -} -bool is_string_set_length_func(irep_idt id){ - return (starts_with(id2string(id),string_set_length_func)); -} -bool is_string_delete_func(irep_idt id){ - return (starts_with(id2string(id),string_delete_func)); -} -bool is_string_delete_char_at_func(irep_idt id){ - return (starts_with(id2string(id),string_delete_char_at_func)); -} -bool is_string_hash_code_func(irep_idt id){ - return (starts_with(id2string(id),string_hash_code_func)); -} -bool is_string_replace_func(irep_idt id){ - return (starts_with(id2string(id),string_replace_func)); -} -bool is_string_to_char_array_func(irep_idt id){ - return (starts_with(id2string(id),string_to_char_array_func)); -} -bool is_string_insert_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_func)); -} -bool is_string_insert_int_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_int_func)); -} -bool is_string_insert_long_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_long_func)); -} -bool is_string_insert_bool_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_bool_func)); -} -bool is_string_insert_char_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_char_func)); -} -bool is_string_insert_float_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_float_func)); -} -bool is_string_insert_double_func(irep_idt id){ - return (starts_with(id2string(id),string_insert_double_func)); -} -bool is_string_code_point_at_func(irep_idt id){ - return (starts_with(id2string(id),string_code_point_at_func)); -} -bool is_string_code_point_before_func(irep_idt id){ - return (starts_with(id2string(id),string_code_point_before_func)); -} -bool is_string_code_point_count_func(irep_idt id){ - return (starts_with(id2string(id),string_code_point_count_func)); -} -bool is_string_code_point_offset_by_code_point_func(irep_idt id){ - return (starts_with(id2string(id),string_code_point_offset_by_code_point_func)); -} -bool is_string_concat_code_point_func(irep_idt id){ - return (starts_with(id2string(id),string_concat_code_point_func)); -} -bool is_string_compare_to_func(irep_idt id){ - return (starts_with(id2string(id),string_compare_to_func)); -} -bool is_string_intern_func(irep_idt id){ - return (starts_with(id2string(id),string_intern_func)); -} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index e3d73f39207..785cf884e13 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -11,68 +11,66 @@ Date: September 2016 #ifndef CPROVER_STRING_FUNCTIONS_H #define CPROVER_STRING_FUNCTIONS_H -#include +#include -#include -#include - -bool starts_with(std::string s, std::string t); -bool is_string_literal_func(irep_idt id); -bool is_char_literal_func(irep_idt id); -bool is_string_char_at_func(irep_idt id); -bool is_string_char_set_func(irep_idt id); -bool is_string_code_point_at_func(irep_idt id); -bool is_string_code_point_before_func(irep_idt id); -bool is_string_code_point_count_func(irep_idt id); -bool is_string_code_point_offset_by_code_point_func(irep_idt id); -bool is_string_compare_to_func(irep_idt id); -bool is_string_concat_func(irep_idt id); -bool is_string_concat_int_func(irep_idt id); -bool is_string_concat_long_func(irep_idt id); -bool is_string_concat_char_func(irep_idt id); -bool is_string_concat_bool_func(irep_idt id); -bool is_string_concat_double_func(irep_idt id); -bool is_string_concat_float_func(irep_idt id); -bool is_string_concat_code_point_func(irep_idt id); -bool is_string_contains_func(irep_idt id); -bool is_string_copy_func(irep_idt id); -bool is_string_delete_func(irep_idt id); -bool is_string_delete_char_at_func(irep_idt id); -bool is_string_equal_func(irep_idt id); -bool is_string_equals_ignore_case_func(irep_idt id); -bool is_string_empty_string_func(irep_idt id); -bool is_string_endswith_func(irep_idt id); -bool is_string_hash_code_func(irep_idt id); -bool is_string_index_of_func(irep_idt id); -bool is_string_intern_func(irep_idt id); -bool is_string_insert_func(irep_idt id); -bool is_string_insert_int_func(irep_idt id); -bool is_string_insert_long_func(irep_idt id); -bool is_string_insert_bool_func(irep_idt id); -bool is_string_insert_char_func(irep_idt id); -bool is_string_insert_float_func(irep_idt id); -bool is_string_insert_double_func(irep_idt id); -bool is_string_is_prefix_func(irep_idt id); -bool is_string_is_suffix_func(irep_idt id); -bool is_string_is_empty_func(irep_idt id); -bool is_string_last_index_of_func(irep_idt id); -bool is_string_length_func(irep_idt id); -bool is_string_of_int_func(irep_idt id); -bool is_string_of_int_hex_func(irep_idt id); -bool is_string_of_long_func(irep_idt id); -bool is_string_of_bool_func(irep_idt id); -bool is_string_of_float_func(irep_idt id); -bool is_string_of_double_func(irep_idt id); -bool is_string_of_char_func(irep_idt id); -bool is_string_parse_int_func(irep_idt id); -bool is_string_replace_func(irep_idt id); -bool is_string_set_length_func(irep_idt id); -bool is_string_startswith_func(irep_idt id); -bool is_string_substring_func(irep_idt id); -bool is_string_to_char_array_func(irep_idt id); -bool is_string_to_lower_case_func(irep_idt id); -bool is_string_to_upper_case_func(irep_idt id); -bool is_string_trim_func(irep_idt id); -bool is_string_value_of_func(irep_idt id); +bool starts_with(irep_idt id, irep_idt prefix); +const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_literal_func"); +const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_literal_func"); +const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_char_at_func"); +const irep_idt cprover_string_char_set_func("__CPROVER_uninterpreted_char_set_func"); +const irep_idt cprover_string_code_point_at_func("__CPROVER_uninterpreted_code_point_at_func"); +const irep_idt cprover_string_code_point_before_func("__CPROVER_uninterpreted_code_point_before_func"); +const irep_idt cprover_string_code_point_count_func("__CPROVER_uninterpreted_code_point_count_func"); +const irep_idt cprover_string_offset_by_code_point_func("__CPROVER_uninterpreted_string_offset_by_code_point_func"); +const irep_idt cprover_string_compare_to_func("__CPROVER_uninterpreted_compare_to_func"); +const irep_idt cprover_string_concat_func("__CPROVER_uninterpreted_concat_func"); +const irep_idt cprover_string_concat_int_func("__CPROVER_uninterpreted_concat_int_func"); +const irep_idt cprover_string_concat_long_func("__CPROVER_uninterpreted_concat_long_func"); +const irep_idt cprover_string_concat_char_func("__CPROVER_uninterpreted_concat_char_func"); +const irep_idt cprover_string_concat_bool_func("__CPROVER_uninterpreted_concat_bool_func"); +const irep_idt cprover_string_concat_double_func("__CPROVER_uninterpreted_concat_double_func"); +const irep_idt cprover_string_concat_float_func("__CPROVER_uninterpreted_concat_float_func"); +const irep_idt cprover_string_concat_code_point_func("__CPROVER_uninterpreted_concat_code_point_func"); +const irep_idt cprover_string_contains_func("__CPROVER_uninterpreted_contains_func"); +const irep_idt cprover_string_copy_func("__CPROVER_uninterpreted_copy_func"); +const irep_idt cprover_string_delete_func("__CPROVER_uninterpreted_delete_func"); +const irep_idt cprover_string_delete_char_at_func("__CPROVER_uninterpreted_delete_char_at_func"); +const irep_idt cprover_string_equal_func("__CPROVER_uninterpreted_equal_func"); +const irep_idt cprover_string_equals_ignore_case_func("__CPROVER_uninterpreted_equals_ignore_case_func"); +const irep_idt cprover_string_empty_string_func("__CPROVER_uninterpreted_empty_string_func"); +const irep_idt cprover_string_endswith_func("__CPROVER_uninterpreted_endswith_func"); +const irep_idt cprover_string_format_func("__CPROVER_uninterpreted_format_func"); +const irep_idt cprover_string_hash_code_func("__CPROVER_uninterpreted_hash_code_func"); +const irep_idt cprover_string_index_of_func("__CPROVER_uninterpreted_index_of_func"); +const irep_idt cprover_string_intern_func("__CPROVER_uninterpreted_intern_func"); +const irep_idt cprover_string_insert_func("__CPROVER_uninterpreted_insert_func"); +const irep_idt cprover_string_insert_int_func("__CPROVER_uninterpreted_insert_int_func"); +const irep_idt cprover_string_insert_long_func("__CPROVER_uninterpreted_insert_long_func"); +const irep_idt cprover_string_insert_bool_func("__CPROVER_uninterpreted_insert_bool_func"); +const irep_idt cprover_string_insert_char_func("__CPROVER_uninterpreted_insert_char_func"); +const irep_idt cprover_string_insert_float_func("__CPROVER_uninterpreted_insert_float_func"); +const irep_idt cprover_string_insert_double_func("__CPROVER_uninterpreted_insert_double_func"); +const irep_idt cprover_string_is_prefix_func("__CPROVER_uninterpreted_is_prefix_func"); +const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_is_suffix_func"); +const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_is_empty_func"); +const irep_idt cprover_string_last_index_of_func("__CPROVER_uninterpreted_last_index_of_func"); +const irep_idt cprover_string_length_func("__CPROVER_uninterpreted_length_func"); +const irep_idt cprover_string_of_int_func("__CPROVER_uninterpreted_of_int_func"); +const irep_idt cprover_string_of_int_hex_func("__CPROVER_uninterpreted_of_int_hex_func"); +const irep_idt cprover_string_of_long_func("__CPROVER_uninterpreted_of_long_func"); +const irep_idt cprover_string_of_bool_func("__CPROVER_uninterpreted_of_bool_func"); +const irep_idt cprover_string_of_float_func("__CPROVER_uninterpreted_of_float_func"); +const irep_idt cprover_string_of_double_func("__CPROVER_uninterpreted_of_double_func"); +const irep_idt cprover_string_of_char_func("__CPROVER_uninterpreted_of_char_func"); +const irep_idt cprover_string_parse_int_func("__CPROVER_uninterpreted_parse_int_func"); +const irep_idt cprover_string_replace_func("__CPROVER_uninterpreted_replace_func"); +const irep_idt cprover_string_set_length_func("__CPROVER_uninterpreted_set_length_func"); +const irep_idt cprover_string_startswith_func("__CPROVER_uninterpreted_startswith_func"); +const irep_idt cprover_string_substring_func("__CPROVER_uninterpreted_substring_func"); +const irep_idt cprover_string_to_char_array_func("__CPROVER_uninterpreted_to_char_array_func"); +const irep_idt cprover_string_to_lower_case_func("__CPROVER_uninterpreted_to_lower_case_func"); +const irep_idt cprover_string_to_upper_case_func("__CPROVER_uninterpreted_to_upper_case_func"); +const irep_idt cprover_string_trim_func("__CPROVER_uninterpreted_trim_func"); +const irep_idt cprover_string_value_of_func("__CPROVER_uninterpreted_value_of_func"); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 5d34e88aae7..5c7ad12fba2 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -97,14 +97,14 @@ void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str else { // assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); if (str.id() == ID_function_application && - is_string_intern_func(to_symbol_expr(to_function_application_expr(str).function()).get_identifier())) { - symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - assign_to_symbol(sym,s); - } - else - assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { + symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + assign_to_symbol(sym,s); + } + else + assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); } //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; } @@ -115,8 +115,8 @@ string_exprt string_refinementt::make_string(const exprt & str) if(str.id()==ID_symbol) return string_of_symbol(to_symbol_expr(str)); else - if (str.id() == ID_function_application && - is_string_intern_func(to_symbol_expr(to_function_application_expr(str).function()).get_identifier())){ + if (str.id() == ID_function_application && + starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); string_exprt s(refined_string_typet::java_char_type()); assign_to_symbol(sym1,s); @@ -245,54 +245,54 @@ bvt string_refinementt::convert_function_application( debug() << "string_refinementt::convert_function_application(" << id << ")" << eom; - if (is_string_literal_func(id) - || is_string_concat_func(id) - || is_string_substring_func(id) - || is_string_char_set_func(id)) { + if (starts_with(id,cprover_string_literal_func) + || starts_with(id,cprover_string_concat_func) + || starts_with(id,cprover_string_substring_func) + || starts_with(id,cprover_string_char_set_func)) { string_exprt str = make_string(expr); bvt bv = convert_bv(str); return bv; - } else if (is_char_literal_func(id)) { + } else if (starts_with(id,cprover_char_literal_func)) { return convert_char_literal(expr); - } else if (is_string_length_func(id)) { + } else if (starts_with(id,cprover_string_length_func)) { return convert_string_length(expr); - } else if (is_string_equal_func(id)) { + } else if (starts_with(id,cprover_string_equal_func)) { return convert_bv(convert_string_equal(expr)); - } else if (is_string_equals_ignore_case_func(id)) { + } else if (starts_with(id,cprover_string_equals_ignore_case_func)) { return convert_bv(convert_string_equals_ignore_case(expr)); - } else if (is_string_is_empty_func(id)) { + } else if (starts_with(id,cprover_string_is_empty_func)) { return convert_bv(convert_string_is_empty(expr)); - } else if (is_string_char_at_func(id)) { + } else if (starts_with(id,cprover_string_char_at_func)) { return convert_string_char_at(expr); - } else if (is_string_is_prefix_func(id)) { + } else if (starts_with(id,cprover_string_is_prefix_func)) { return convert_bv(convert_string_is_prefix(expr)); - } else if (is_string_is_suffix_func(id)) { + } else if (starts_with(id,cprover_string_is_suffix_func)) { return convert_string_is_suffix(expr); - } else if (is_string_startswith_func(id)) { + } else if (starts_with(id,cprover_string_startswith_func)) { return convert_bv(convert_string_is_prefix(expr,true)); - } else if (is_string_endswith_func(id)) { + } else if (starts_with(id,cprover_string_endswith_func)) { return convert_string_is_suffix(expr,true); - } else if (is_string_contains_func(id)) { + } else if (starts_with(id,cprover_string_contains_func)) { return convert_string_contains(expr); - } else if (is_string_hash_code_func(id)) { + } else if (starts_with(id,cprover_string_hash_code_func)) { return convert_bv(convert_string_hash_code(expr)); - } else if (is_string_index_of_func(id)) { + } else if (starts_with(id,cprover_string_index_of_func)) { return convert_bv(convert_string_index_of(expr)); - } else if (is_string_last_index_of_func(id)) { + } else if (starts_with(id,cprover_string_last_index_of_func)) { return convert_bv(convert_string_last_index_of(expr)); - } else if (is_string_parse_int_func(id)) { + } else if (starts_with(id,cprover_string_parse_int_func)) { return convert_bv(convert_string_parse_int(expr)); - } else if (is_string_to_char_array_func(id)) { + } else if (starts_with(id,cprover_string_to_char_array_func)) { return convert_bv(convert_string_to_char_array(expr)); - } else if (is_string_code_point_at_func(id)) { + } else if (starts_with(id,cprover_string_code_point_at_func)) { return convert_bv(convert_string_code_point_at(expr)); - } else if (is_string_code_point_before_func(id)) { + } else if (starts_with(id,cprover_string_code_point_before_func)) { return convert_bv(convert_string_code_point_before(expr)); - } else if (is_string_code_point_count_func(id)) { + } else if (starts_with(id,cprover_string_code_point_count_func)) { return convert_bv(convert_string_code_point_count(expr)); - } else if (is_string_code_point_offset_by_code_point_func(id)) { + } else if (starts_with(id,cprover_string_offset_by_code_point_func)) { return convert_bv(convert_string_offset_by_code_point(expr)); - } else if (is_string_compare_to_func(id)) { + } else if (starts_with(id,cprover_string_compare_to_func)) { return convert_bv(convert_string_compare_to(expr)); } } From 547f38463e116bc68f46d7f5ef30fbe57af5b374 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 13 Oct 2016 17:10:02 +0100 Subject: [PATCH 138/221] simplification of the code for string functions identifiers --- regression/strings/cprover-string-hack.h | 56 +++++++++++------------ src/solvers/refinement/string_functions.h | 2 +- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 5ee11a69152..361d1113392 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -6,68 +6,68 @@ typedef unsigned char __CPROVER_char; * CPROVER string functions ******************************************************************************/ /* returns s[p] */ -#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at(s, p) +#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at_func(s, p) /* string equality */ #define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal_func(s1, s2) /* defines a string literal, e.g. __CPROVER_string_literal("foo") */ -#define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal(s) +#define __CPROVER_string_literal(s) __CPROVER_uninterpreted_string_literal_func(s) /* defines a char literal, e.g. __CPROVER_char_literal("c"). NOTE: you * *must* use a C string literal as argument (i.e. double quotes "c", not * single 'c') */ -#define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal(c) +#define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal_func(c) /* produces the concatenation of s1 and s2 */ -#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_strcat_func(s1, s2) +#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_concat_func(s1, s2) /* return the length of s */ -#define __CPROVER_string_length(s) __CPROVER_uninterpreted_strlen(s) +#define __CPROVER_string_length(s) __CPROVER_uninterpreted_string_length_func(s) /* extracts the substring between positions i and j (j not included) */ -#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_substring(s, i, j) +#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_substring_func(s, i, j) /* test whether p is a prefix of s */ -#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_strprefixof(p, s) +#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_string_prefix_of_func(p, s) /* test whether p is a suffix of s */ -#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_strsuffixof(p, s) +#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_string_suffix_of_func(p, s) /* test whether p contains s */ -#define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_strcontains(p, s) +#define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_string_contains_func(p, s) /* first index where character c appears, -1 if not found */ -#define __CPROVER_string_index_of(s, c) __CPROVER_uninterpreted_strindexof(s, c) +#define __CPROVER_string_index_of(s, c) __CPROVER_uninterpreted_string_index_of_func(s, c) /* last index where character c appears */ -#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_strlastindexof(s, c) +#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_string_lastindex_of_func(s, c) /* returns a new string obtained from s by setting s[p] = c */ #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_string_char_set_func(s, p, c) -#define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy(s) -#define __CPROVER_parse_int(s) __CPROVER_uninterpreted_parse_int(s) -#define __CPROVER_string_of_int(i) __CPROVER_uninterpreted_string_of_int(i) +#define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy_func(s) +#define __CPROVER_parse_int(s) __CPROVER_uninterpreted_parse_int_func(s) +#define __CPROVER_string_of_int(i) __CPROVER_uninterpreted_string_of_int_func(i) /****************************************************************************** * don't use these directly ******************************************************************************/ -extern __CPROVER_char __CPROVER_uninterpreted_char_at(__CPROVER_string str, int pos); +extern __CPROVER_char __CPROVER_uninterpreted_char_at_func(__CPROVER_string str, int pos); extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); -extern __CPROVER_string __CPROVER_uninterpreted_string_literal(); -extern __CPROVER_char __CPROVER_uninterpreted_char_literal(); -extern __CPROVER_string __CPROVER_uninterpreted_strcat_func(__CPROVER_string str1, __CPROVER_string str2); -extern int __CPROVER_uninterpreted_strlen(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_substring(__CPROVER_string str, int i, int j); -extern __CPROVER_bool __CPROVER_uninterpreted_strprefixof(__CPROVER_string pref, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_strsuffixof(__CPROVER_string suff, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_strcontains(__CPROVER_string str1, __CPROVER_string str2); -extern int __CPROVER_uninterpreted_strindexof(__CPROVER_string str, __CPROVER_char c); -extern int __CPROVER_uninterpreted_strlastindexof(__CPROVER_string str, __CPROVER_char c); +extern __CPROVER_string __CPROVER_uninterpreted_string_literal_func(); +extern __CPROVER_char __CPROVER_uninterpreted_char_literal_func(); +extern __CPROVER_string __CPROVER_uninterpreted_concat_func(__CPROVER_string str1, __CPROVER_string str2); +extern int __CPROVER_uninterpreted_string_length_func(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_substring_func(__CPROVER_string str, int i, int j); +extern __CPROVER_bool __CPROVER_uninterpreted_string_is_prefix_func(__CPROVER_string pref, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_string_is_suffix_of_func(__CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_string_contains_func(__CPROVER_string str1, __CPROVER_string str2); +extern int __CPROVER_uninterpreted_string_index_of_func(__CPROVER_string str, __CPROVER_char c); +extern int __CPROVER_uninterpreted_string_last_index_of_func(__CPROVER_string str, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func(__CPROVER_string str, int pos, __CPROVER_char c); -extern __CPROVER_string __CPROVER_uninterpreted_string_copy(__CPROVER_string str); -extern unsigned __CPROVER_uninterpreted_parse_int(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_string_of_int(unsigned i); +extern __CPROVER_string __CPROVER_uninterpreted_string_copy_func(__CPROVER_string str); +extern unsigned __CPROVER_uninterpreted_parse_int_func(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_string_of_int_func(unsigned i); diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 785cf884e13..bdceb023133 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -15,7 +15,7 @@ Date: September 2016 bool starts_with(irep_idt id, irep_idt prefix); const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_literal_func"); -const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_literal_func"); +const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_char_literal_func"); const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_char_at_func"); const irep_idt cprover_string_char_set_func("__CPROVER_uninterpreted_char_set_func"); const irep_idt cprover_string_code_point_at_func("__CPROVER_uninterpreted_code_point_at_func"); From 0202011b8b701861ac8ce11f362476841ae3213e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 14 Oct 2016 11:03:17 +0100 Subject: [PATCH 139/221] simplification of the code for string functions identifiers and corection of the c tests accordingly --- regression/strings/cprover-string-hack.h | 24 ++-- regression/strings/test2/test.desc | 2 +- regression/strings/test3/test.desc | 8 +- regression/strings/test4/test.desc | 2 +- regression/strings/test_char_set/test.desc | 4 +- regression/strings/test_concat/test.desc | 4 +- regression/strings/test_contains/test.desc | 6 +- regression/strings/test_equal/test.desc | 4 +- regression/strings/test_int/test.desc | 6 +- regression/strings/test_pass1/test.desc | 4 +- regression/strings/test_pass_pc3/test.desc | 4 +- regression/strings/test_prefix/test.c | 2 +- regression/strings/test_substring/test.desc | 8 +- regression/strings/test_suffix/test.desc | 4 +- src/solvers/refinement/string_expr.cpp | 7 +- src/solvers/refinement/string_functions.h | 112 +++++++++---------- src/solvers/refinement/string_refinement.cpp | 2 +- 17 files changed, 103 insertions(+), 100 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 361d1113392..8a560e9d70d 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -6,7 +6,7 @@ typedef unsigned char __CPROVER_char; * CPROVER string functions ******************************************************************************/ /* returns s[p] */ -#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_char_at_func(s, p) +#define __CPROVER_char_at(s, p) __CPROVER_uninterpreted_string_char_at_func(s, p) /* string equality */ #define __CPROVER_string_equal(s1, s2) __CPROVER_uninterpreted_string_equal_func(s1, s2) @@ -20,19 +20,19 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_char_literal(c) __CPROVER_uninterpreted_char_literal_func(c) /* produces the concatenation of s1 and s2 */ -#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_concat_func(s1, s2) +#define __CPROVER_string_concat(s1, s2) __CPROVER_uninterpreted_string_concat_func(s1, s2) /* return the length of s */ #define __CPROVER_string_length(s) __CPROVER_uninterpreted_string_length_func(s) /* extracts the substring between positions i and j (j not included) */ -#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_substring_func(s, i, j) +#define __CPROVER_string_substring(s, i, j) __CPROVER_uninterpreted_string_substring_func(s, i, j) /* test whether p is a prefix of s */ -#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_string_prefix_of_func(p, s) +#define __CPROVER_string_isprefix(p, s) __CPROVER_uninterpreted_string_is_prefix_func(p, s) /* test whether p is a suffix of s */ -#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_string_suffix_of_func(p, s) +#define __CPROVER_string_issuffix(p, s) __CPROVER_uninterpreted_string_is_suffix_func(p, s) /* test whether p contains s */ #define __CPROVER_string_contains(p, s) __CPROVER_uninterpreted_string_contains_func(p, s) @@ -40,34 +40,34 @@ typedef unsigned char __CPROVER_char; #define __CPROVER_string_index_of(s, c) __CPROVER_uninterpreted_string_index_of_func(s, c) /* last index where character c appears */ -#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_string_lastindex_of_func(s, c) +#define __CPROVER_string_last_index_of(s, c) __CPROVER_uninterpreted_string_last_index_of_func(s, c) /* returns a new string obtained from s by setting s[p] = c */ #define __CPROVER_char_set(s, p, c) __CPROVER_uninterpreted_string_char_set_func(s, p, c) #define __CPROVER_string_copy(s) __CPROVER_uninterpreted_string_copy_func(s) -#define __CPROVER_parse_int(s) __CPROVER_uninterpreted_parse_int_func(s) +#define __CPROVER_parse_int(s) __CPROVER_uninterpreted_string_parse_int_func(s) #define __CPROVER_string_of_int(i) __CPROVER_uninterpreted_string_of_int_func(i) /****************************************************************************** * don't use these directly ******************************************************************************/ -extern __CPROVER_char __CPROVER_uninterpreted_char_at_func(__CPROVER_string str, int pos); +extern __CPROVER_char __CPROVER_uninterpreted_string_char_at_func(__CPROVER_string str, int pos); extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); extern __CPROVER_string __CPROVER_uninterpreted_string_literal_func(); extern __CPROVER_char __CPROVER_uninterpreted_char_literal_func(); -extern __CPROVER_string __CPROVER_uninterpreted_concat_func(__CPROVER_string str1, __CPROVER_string str2); +extern __CPROVER_string __CPROVER_uninterpreted_string_concat_func(__CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_string_length_func(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_substring_func(__CPROVER_string str, int i, int j); +extern __CPROVER_string __CPROVER_uninterpreted_string_substring_func(__CPROVER_string str, int i, int j); extern __CPROVER_bool __CPROVER_uninterpreted_string_is_prefix_func(__CPROVER_string pref, __CPROVER_string str); -extern __CPROVER_bool __CPROVER_uninterpreted_string_is_suffix_of_func(__CPROVER_string suff, __CPROVER_string str); +extern __CPROVER_bool __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_string suff, __CPROVER_string str); extern __CPROVER_bool __CPROVER_uninterpreted_string_contains_func(__CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_string_index_of_func(__CPROVER_string str, __CPROVER_char c); extern int __CPROVER_uninterpreted_string_last_index_of_func(__CPROVER_string str, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func(__CPROVER_string str, int pos, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_copy_func(__CPROVER_string str); -extern unsigned __CPROVER_uninterpreted_parse_int_func(__CPROVER_string str); +extern unsigned __CPROVER_uninterpreted_string_parse_int_func(__CPROVER_string str); extern __CPROVER_string __CPROVER_uninterpreted_string_of_int_func(unsigned i); diff --git a/regression/strings/test2/test.desc b/regression/strings/test2/test.desc index 5e76e674b95..d3054f813f1 100644 --- a/regression/strings/test2/test.desc +++ b/regression/strings/test2/test.desc @@ -1,6 +1,6 @@ CORE test.c ---z3 +--pass ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion n == 5: SUCCESS$ diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 6ea4200c9d0..6cacec86a19 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strlen(s) == i + 5: SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"po\"), s): SUCCESS$ -^\[main.assertion.3\] assertion __CPROVER_uninterpreted_char_at(s, i) == __CPROVER_uninterpreted_char_literal(\"p\"): SUCCESS$ -^\[main.assertion.4\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"p!o\"), s): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s) == i + 5: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"po\"), s): SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_uninterpreted_string_char_at_func(s, i) == __CPROVER_uninterpreted_char_literal_func(\"p\"): SUCCESS$ +^\[main.assertion.4\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"p!o\"), s): FAILURE$ -- diff --git a/regression/strings/test4/test.desc b/regression/strings/test4/test.desc index 6373a3a0bcf..0f5bd6ccca7 100644 --- a/regression/strings/test4/test.desc +++ b/regression/strings/test4/test.desc @@ -1,6 +1,6 @@ CORE test.c ---z3 +--pass ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc index 3a68d88966e..8cf42dda8f3 100644 --- a/regression/strings/test_char_set/test.desc +++ b/regression/strings/test_char_set/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal("apc")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal("abc")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func("apc")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func("abc")): FAILURE$ -- diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 83f53415f61..e5d8b30d6da 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion c == __CPROVER_uninterpreted_char_literal(\"p\"): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_char_at(u, 2) == __CPROVER_uninterpreted_char_literal(\"p\"): FAILURE$ +^\[main.assertion.1\] assertion c == __CPROVER_uninterpreted_char_literal_func(\"p\"): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_char_at_func(u, 2) == __CPROVER_uninterpreted_char_literal_func(\"p\"): FAILURE$ -- diff --git a/regression/strings/test_contains/test.desc b/regression/strings/test_contains/test.desc index 19f86a5e7d7..a0c672e8d7d 100644 --- a/regression/strings/test_contains/test.desc +++ b/regression/strings/test_contains/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion !__CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"3\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"12\")): SUCCESS$ -^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_strcontains(t, __CPROVER_uninterpreted_string_literal(\"b\")): FAILURE$ +^\[main.assertion.1\] assertion !__CPROVER_uninterpreted_string_contains_func(t, __CPROVER_uninterpreted_string_literal_func(\"3\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_contains_func(t, __CPROVER_uninterpreted_string_literal_func(\"12\")): SUCCESS$ +^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_contains_func(t, __CPROVER_uninterpreted_string_literal_func(\"b\")): FAILURE$ -- diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index ecf379dbaa7..81ad6913856 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal(\"pippo\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal(\"mippo\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal_func(\"pippo\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal_func(\"mippo\")): FAILURE$ -- diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc index 0f2e1ce6f10..e46e43ed936 100644 --- a/regression/strings/test_int/test.desc +++ b/regression/strings/test_int/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_char_at(s, 0) == .1.: SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_char_at(s, 1) == .2.: SUCCESS$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_char_at_func(s, 0) == .1.: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_char_at_func(s, 1) == .2.: SUCCESS$ ^\[main.assertion.3\] assertion j == 234: SUCCESS$ -^\[main.assertion.4\] assertion j < 233 || __CPROVER_uninterpreted_char_at(s, 2) == .4.: FAILURE$ +^\[main.assertion.4\] assertion j < 233 || __CPROVER_uninterpreted_string_char_at_func(s, 2) == .4.: FAILURE$ -- diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 5c88e72314d..5f091f79ee7 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"a\")): SUCCESS -^\[main.assertion.2\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"a\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"a\")): SUCCESS +^\[main.assertion.2\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"a\")): FAILURE$ ^\*\* 1 of 2 failed (2 iterations)$ diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index db18aef13b1..b4c45aee0ee 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strlen(s3) == 0: FAILURE$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strlen(s3) < 2: SUCCESS$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s3) == 0: FAILURE$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_length_func(s3) < 2: SUCCESS$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test_prefix/test.c b/regression/strings/test_prefix/test.c index 17db1a81740..041a6a3ed41 100644 --- a/regression/strings/test_prefix/test.c +++ b/regression/strings/test_prefix/test.c @@ -4,7 +4,7 @@ int main() { - __CPROVER_string s = __CPROVER_uninterpreted_string_literal("Hello World!"); + __CPROVER_string s = __CPROVER_string_literal("Hello World!"); //__CPROVER_assume(__CPROVER_string_equal(s, __CPROVER_string_literal("Hello World!"))); diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc index cc7ff5f5841..6fe9134b59d 100644 --- a/regression/strings/test_substring/test.desc +++ b/regression/strings/test_substring/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cd\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cc\")): FAILURE$ -^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"bc\")): SUCCESS$ -^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal(\"cd\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cd\")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cc\")): FAILURE$ +^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"bc\")): SUCCESS$ +^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cd\")): FAILURE$ -- \ No newline at end of file diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc index 623fb860239..e0e8af7704c 100644 --- a/regression/strings/test_suffix/test.desc +++ b/regression/strings/test_suffix/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"po\"), s): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_strsuffixof(__CPROVER_uninterpreted_string_literal(\"pp\"), s): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"po\"), s): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"pp\"), s): FAILURE$ -- diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index adebbf5bac0..436f0b25ec4 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -11,6 +11,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include +#include exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; @@ -1155,6 +1156,9 @@ void string_exprt::of_string_format(const function_application_exprt &f, std::ma string_exprt begin(char_type); begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); strings.push_back(begin); + std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; + typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + std::cout << "string_exprt::array_tab : " << arg_tab.pretty() << std::endl; while(position != std::string::npos) { @@ -1163,8 +1167,7 @@ void string_exprt::of_string_format(const function_application_exprt &f, std::ma case 'd' : { string_exprt str(char_type); - str.of_int(/*index_exprt(args[1],refined_string_typet::index_of_int(arg_counter++))*/args[++arg_counter],axioms,is_c_string,10); - std::cout << "argument : " << args[arg_counter].pretty() << std::endl; + str.of_int(typecast_exprt(index_exprt(arg_tab,refined_string_typet::index_of_int(arg_counter++)), signedbv_typet(32)),axioms,is_c_string,10); strings.push_back(str); break; } diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index bdceb023133..f07294ac0a4 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -14,63 +14,63 @@ Date: September 2016 #include bool starts_with(irep_idt id, irep_idt prefix); -const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_literal_func"); const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_char_literal_func"); -const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_char_at_func"); -const irep_idt cprover_string_char_set_func("__CPROVER_uninterpreted_char_set_func"); -const irep_idt cprover_string_code_point_at_func("__CPROVER_uninterpreted_code_point_at_func"); -const irep_idt cprover_string_code_point_before_func("__CPROVER_uninterpreted_code_point_before_func"); -const irep_idt cprover_string_code_point_count_func("__CPROVER_uninterpreted_code_point_count_func"); +const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_string_literal_func"); +const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_string_char_at_func"); +const irep_idt cprover_string_char_set_func("__CPROVER_uninterpreted_string_char_set_func"); +const irep_idt cprover_string_code_point_at_func("__CPROVER_uninterpreted_string_code_point_at_func"); +const irep_idt cprover_string_code_point_before_func("__CPROVER_uninterpreted_string_code_point_before_func"); +const irep_idt cprover_string_code_point_count_func("__CPROVER_uninterpreted_string_code_point_count_func"); const irep_idt cprover_string_offset_by_code_point_func("__CPROVER_uninterpreted_string_offset_by_code_point_func"); -const irep_idt cprover_string_compare_to_func("__CPROVER_uninterpreted_compare_to_func"); -const irep_idt cprover_string_concat_func("__CPROVER_uninterpreted_concat_func"); -const irep_idt cprover_string_concat_int_func("__CPROVER_uninterpreted_concat_int_func"); -const irep_idt cprover_string_concat_long_func("__CPROVER_uninterpreted_concat_long_func"); -const irep_idt cprover_string_concat_char_func("__CPROVER_uninterpreted_concat_char_func"); -const irep_idt cprover_string_concat_bool_func("__CPROVER_uninterpreted_concat_bool_func"); -const irep_idt cprover_string_concat_double_func("__CPROVER_uninterpreted_concat_double_func"); -const irep_idt cprover_string_concat_float_func("__CPROVER_uninterpreted_concat_float_func"); -const irep_idt cprover_string_concat_code_point_func("__CPROVER_uninterpreted_concat_code_point_func"); -const irep_idt cprover_string_contains_func("__CPROVER_uninterpreted_contains_func"); -const irep_idt cprover_string_copy_func("__CPROVER_uninterpreted_copy_func"); -const irep_idt cprover_string_delete_func("__CPROVER_uninterpreted_delete_func"); -const irep_idt cprover_string_delete_char_at_func("__CPROVER_uninterpreted_delete_char_at_func"); -const irep_idt cprover_string_equal_func("__CPROVER_uninterpreted_equal_func"); -const irep_idt cprover_string_equals_ignore_case_func("__CPROVER_uninterpreted_equals_ignore_case_func"); -const irep_idt cprover_string_empty_string_func("__CPROVER_uninterpreted_empty_string_func"); -const irep_idt cprover_string_endswith_func("__CPROVER_uninterpreted_endswith_func"); -const irep_idt cprover_string_format_func("__CPROVER_uninterpreted_format_func"); -const irep_idt cprover_string_hash_code_func("__CPROVER_uninterpreted_hash_code_func"); -const irep_idt cprover_string_index_of_func("__CPROVER_uninterpreted_index_of_func"); -const irep_idt cprover_string_intern_func("__CPROVER_uninterpreted_intern_func"); -const irep_idt cprover_string_insert_func("__CPROVER_uninterpreted_insert_func"); -const irep_idt cprover_string_insert_int_func("__CPROVER_uninterpreted_insert_int_func"); -const irep_idt cprover_string_insert_long_func("__CPROVER_uninterpreted_insert_long_func"); -const irep_idt cprover_string_insert_bool_func("__CPROVER_uninterpreted_insert_bool_func"); -const irep_idt cprover_string_insert_char_func("__CPROVER_uninterpreted_insert_char_func"); -const irep_idt cprover_string_insert_float_func("__CPROVER_uninterpreted_insert_float_func"); -const irep_idt cprover_string_insert_double_func("__CPROVER_uninterpreted_insert_double_func"); -const irep_idt cprover_string_is_prefix_func("__CPROVER_uninterpreted_is_prefix_func"); -const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_is_suffix_func"); -const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_is_empty_func"); -const irep_idt cprover_string_last_index_of_func("__CPROVER_uninterpreted_last_index_of_func"); -const irep_idt cprover_string_length_func("__CPROVER_uninterpreted_length_func"); -const irep_idt cprover_string_of_int_func("__CPROVER_uninterpreted_of_int_func"); -const irep_idt cprover_string_of_int_hex_func("__CPROVER_uninterpreted_of_int_hex_func"); -const irep_idt cprover_string_of_long_func("__CPROVER_uninterpreted_of_long_func"); -const irep_idt cprover_string_of_bool_func("__CPROVER_uninterpreted_of_bool_func"); -const irep_idt cprover_string_of_float_func("__CPROVER_uninterpreted_of_float_func"); -const irep_idt cprover_string_of_double_func("__CPROVER_uninterpreted_of_double_func"); -const irep_idt cprover_string_of_char_func("__CPROVER_uninterpreted_of_char_func"); -const irep_idt cprover_string_parse_int_func("__CPROVER_uninterpreted_parse_int_func"); -const irep_idt cprover_string_replace_func("__CPROVER_uninterpreted_replace_func"); -const irep_idt cprover_string_set_length_func("__CPROVER_uninterpreted_set_length_func"); -const irep_idt cprover_string_startswith_func("__CPROVER_uninterpreted_startswith_func"); -const irep_idt cprover_string_substring_func("__CPROVER_uninterpreted_substring_func"); -const irep_idt cprover_string_to_char_array_func("__CPROVER_uninterpreted_to_char_array_func"); -const irep_idt cprover_string_to_lower_case_func("__CPROVER_uninterpreted_to_lower_case_func"); -const irep_idt cprover_string_to_upper_case_func("__CPROVER_uninterpreted_to_upper_case_func"); -const irep_idt cprover_string_trim_func("__CPROVER_uninterpreted_trim_func"); -const irep_idt cprover_string_value_of_func("__CPROVER_uninterpreted_value_of_func"); +const irep_idt cprover_string_compare_to_func("__CPROVER_uninterpreted_string_compare_to_func"); +const irep_idt cprover_string_concat_func("__CPROVER_uninterpreted_string_concat_func"); +const irep_idt cprover_string_concat_int_func("__CPROVER_uninterpreted_string_concat_int_func"); +const irep_idt cprover_string_concat_long_func("__CPROVER_uninterpreted_string_concat_long_func"); +const irep_idt cprover_string_concat_char_func("__CPROVER_uninterpreted_string_concat_char_func"); +const irep_idt cprover_string_concat_bool_func("__CPROVER_uninterpreted_string_concat_bool_func"); +const irep_idt cprover_string_concat_double_func("__CPROVER_uninterpreted_string_concat_double_func"); +const irep_idt cprover_string_concat_float_func("__CPROVER_uninterpreted_string_concat_float_func"); +const irep_idt cprover_string_concat_code_point_func("__CPROVER_uninterpreted_string_concat_code_point_func"); +const irep_idt cprover_string_contains_func("__CPROVER_uninterpreted_string_contains_func"); +const irep_idt cprover_string_copy_func("__CPROVER_uninterpreted_string_copy_func"); +const irep_idt cprover_string_delete_func("__CPROVER_uninterpreted_string_delete_func"); +const irep_idt cprover_string_delete_char_at_func("__CPROVER_uninterpreted_string_delete_char_at_func"); +const irep_idt cprover_string_equal_func("__CPROVER_uninterpreted_string_equal_func"); +const irep_idt cprover_string_equals_ignore_case_func("__CPROVER_uninterpreted_string_equals_ignore_case_func"); +const irep_idt cprover_string_empty_string_func("__CPROVER_uninterpreted_string_empty_string_func"); +const irep_idt cprover_string_endswith_func("__CPROVER_uninterpreted_string_endswith_func"); +const irep_idt cprover_string_format_func("__CPROVER_uninterpreted_string_format_func"); +const irep_idt cprover_string_hash_code_func("__CPROVER_uninterpreted_string_hash_code_func"); +const irep_idt cprover_string_index_of_func("__CPROVER_uninterpreted_string_index_of_func"); +const irep_idt cprover_string_intern_func("__CPROVER_uninterpreted_string_intern_func"); +const irep_idt cprover_string_insert_func("__CPROVER_uninterpreted_string_insert_func"); +const irep_idt cprover_string_insert_int_func("__CPROVER_uninterpreted_string_insert_int_func"); +const irep_idt cprover_string_insert_long_func("__CPROVER_uninterpreted_string_insert_long_func"); +const irep_idt cprover_string_insert_bool_func("__CPROVER_uninterpreted_string_insert_bool_func"); +const irep_idt cprover_string_insert_char_func("__CPROVER_uninterpreted_string_insert_char_func"); +const irep_idt cprover_string_insert_float_func("__CPROVER_uninterpreted_string_insert_float_func"); +const irep_idt cprover_string_insert_double_func("__CPROVER_uninterpreted_string_insert_double_func"); +const irep_idt cprover_string_is_prefix_func("__CPROVER_uninterpreted_string_is_prefix_func"); +const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_string_is_suffix_func"); +const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_string_is_empty_func"); +const irep_idt cprover_string_last_index_of_func("__CPROVER_uninterpreted_string_last_index_of_func"); +const irep_idt cprover_string_length_func("__CPROVER_uninterpreted_string_length_func"); +const irep_idt cprover_string_of_int_func("__CPROVER_uninterpreted_string_of_int_func"); +const irep_idt cprover_string_of_int_hex_func("__CPROVER_uninterpreted_string_of_int_hex_func"); +const irep_idt cprover_string_of_long_func("__CPROVER_uninterpreted_string_of_long_func"); +const irep_idt cprover_string_of_bool_func("__CPROVER_uninterpreted_string_of_bool_func"); +const irep_idt cprover_string_of_float_func("__CPROVER_uninterpreted_string_of_float_func"); +const irep_idt cprover_string_of_double_func("__CPROVER_uninterpreted_string_of_double_func"); +const irep_idt cprover_string_of_char_func("__CPROVER_uninterpreted_string_of_char_func"); +const irep_idt cprover_string_parse_int_func("__CPROVER_uninterpreted_string_parse_int_func"); +const irep_idt cprover_string_replace_func("__CPROVER_uninterpreted_string_replace_func"); +const irep_idt cprover_string_set_length_func("__CPROVER_uninterpreted_string_set_length_func"); +const irep_idt cprover_string_startswith_func("__CPROVER_uninterpreted_string_startswith_func"); +const irep_idt cprover_string_substring_func("__CPROVER_uninterpreted_string_substring_func"); +const irep_idt cprover_string_to_char_array_func("__CPROVER_uninterpreted_string_to_char_array_func"); +const irep_idt cprover_string_to_lower_case_func("__CPROVER_uninterpreted_string_to_lower_case_func"); +const irep_idt cprover_string_to_upper_case_func("__CPROVER_uninterpreted_string_to_upper_case_func"); +const irep_idt cprover_string_trim_func("__CPROVER_uninterpreted_string_trim_func"); +const irep_idt cprover_string_value_of_func("__CPROVER_uninterpreted_string_value_of_func"); #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 5c7ad12fba2..0cefe8d2e4f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -547,7 +547,7 @@ bvt string_refinementt::convert_string_length( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); //bad args to string length? + assert(args.size() == 1); string_exprt str = make_string(args[0]); exprt length = str.length(); return convert_bv(length); From 1bfc2643f116d003453203d393fdc7c3a3171ed8 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sat, 15 Oct 2016 20:53:19 +0100 Subject: [PATCH 140/221] removing useless z3 string tests --- .../strings/Z3str2-bv/concat-000/test.c | 18 - .../Z3str2-bv/concat-000/test.c.qarr.smt2 | 332 -------- .../Z3str2-bv/concat-000/test.c.str.smt2 | 263 ------- .../strings/Z3str2-bv/concat-001/test.c | 14 - .../Z3str2-bv/concat-001/test.c.qarr.smt2 | 209 ----- .../Z3str2-bv/concat-001/test.c.str.smt2 | 165 ---- .../strings/Z3str2-bv/concat-002/test.c | 17 - .../Z3str2-bv/concat-002/test.c.qarr.smt2 | 265 ------- .../Z3str2-bv/concat-002/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-003/test.c | 15 - .../Z3str2-bv/concat-003/test.c.qarr.smt2 | 228 ------ .../Z3str2-bv/concat-003/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-004-unsat/test.c | 15 - .../concat-004-unsat/test.c.qarr.smt2 | 227 ------ .../concat-004-unsat/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-005-unsat/test.c | 14 - .../concat-005-unsat/test.c.qarr.smt2 | 177 ----- .../concat-005-unsat/test.c.str.smt2 | 143 ---- .../strings/Z3str2-bv/concat-006/test.c | 14 - .../Z3str2-bv/concat-006/test.c.qarr.smt2 | 177 ----- .../Z3str2-bv/concat-006/test.c.str.smt2 | 143 ---- .../strings/Z3str2-bv/concat-007/test.c | 14 - .../Z3str2-bv/concat-007/test.c.qarr.smt2 | 176 ----- .../Z3str2-bv/concat-007/test.c.str.smt2 | 143 ---- .../strings/Z3str2-bv/concat-008/test.c | 14 - .../Z3str2-bv/concat-008/test.c.qarr.smt2 | 216 ----- .../Z3str2-bv/concat-008/test.c.str.smt2 | 166 ---- .../strings/Z3str2-bv/concat-009/test.c | 14 - .../Z3str2-bv/concat-009/test.c.qarr.smt2 | 217 ------ .../Z3str2-bv/concat-009/test.c.str.smt2 | 166 ---- .../strings/Z3str2-bv/concat-010/test.c | 14 - .../Z3str2-bv/concat-010/test.c.qarr.smt2 | 216 ----- .../Z3str2-bv/concat-010/test.c.str.smt2 | 166 ---- .../strings/Z3str2-bv/concat-011/test.c | 14 - .../Z3str2-bv/concat-011/test.c.qarr.smt2 | 218 ------ .../Z3str2-bv/concat-011/test.c.str.smt2 | 166 ---- .../strings/Z3str2-bv/concat-012/test.c | 14 - .../Z3str2-bv/concat-012/test.c.qarr.smt2 | 197 ----- .../Z3str2-bv/concat-012/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-013/test.c | 15 - .../Z3str2-bv/concat-013/test.c.qarr.smt2 | 235 ------ .../Z3str2-bv/concat-013/test.c.str.smt2 | 194 ----- .../strings/Z3str2-bv/concat-014/test.c | 12 - .../Z3str2-bv/concat-014/test.c.qarr.smt2 | 152 ---- .../Z3str2-bv/concat-014/test.c.str.smt2 | 129 --- .../strings/Z3str2-bv/concat-015/test.c | 14 - .../Z3str2-bv/concat-015/test.c.qarr.smt2 | 348 --------- .../Z3str2-bv/concat-015/test.c.str.smt2 | 295 ------- .../strings/Z3str2-bv/concat-016-unsat/test.c | 12 - .../concat-016-unsat/test.c.qarr.smt2 | 162 ---- .../concat-016-unsat/test.c.str.smt2 | 129 --- .../strings/Z3str2-bv/concat-017/test.c | 12 - .../Z3str2-bv/concat-017/test.c.qarr.smt2 | 161 ---- .../Z3str2-bv/concat-017/test.c.str.smt2 | 129 --- .../strings/Z3str2-bv/concat-018/test.c | 16 - .../Z3str2-bv/concat-018/test.c.qarr.smt2 | 317 -------- .../Z3str2-bv/concat-018/test.c.str.smt2 | 254 ------ .../strings/Z3str2-bv/concat-019-unsat/test.c | 12 - .../concat-019-unsat/test.c.qarr.smt2 | 162 ---- .../concat-019-unsat/test.c.str.smt2 | 129 --- .../strings/Z3str2-bv/concat-020/test.c | 13 - .../Z3str2-bv/concat-020/test.c.qarr.smt2 | 143 ---- .../Z3str2-bv/concat-020/test.c.str.smt2 | 124 --- .../strings/Z3str2-bv/concat-021/test.c | 16 - .../Z3str2-bv/concat-021/test.c.qarr.smt2 | 500 ------------ .../Z3str2-bv/concat-021/test.c.str.smt2 | 426 ---------- .../strings/Z3str2-bv/concat-022/test.c | 16 - .../Z3str2-bv/concat-022/test.c.qarr.smt2 | 736 ------------------ .../Z3str2-bv/concat-022/test.c.str.smt2 | 631 --------------- .../strings/Z3str2-bv/concat-023/test.c | 17 - .../Z3str2-bv/concat-023/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-023/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-024/test.c | 15 - .../Z3str2-bv/concat-024/test.c.qarr.smt2 | 165 ---- .../Z3str2-bv/concat-024/test.c.str.smt2 | 137 ---- .../strings/Z3str2-bv/concat-025/test.c | 18 - .../Z3str2-bv/concat-025/test.c.qarr.smt2 | 244 ------ .../Z3str2-bv/concat-025/test.c.str.smt2 | 220 ------ .../strings/Z3str2-bv/concat-026/test.c | 17 - .../Z3str2-bv/concat-026/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-026/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-027/test.c | 17 - .../Z3str2-bv/concat-027/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-027/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-028/test.c | 17 - .../Z3str2-bv/concat-028/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-028/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-029/test.c | 17 - .../Z3str2-bv/concat-029/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-029/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-030/test.c | 17 - .../Z3str2-bv/concat-030/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-030/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-031/test.c | 17 - .../Z3str2-bv/concat-031/test.c.qarr.smt2 | 237 ------ .../Z3str2-bv/concat-031/test.c.str.smt2 | 213 ----- .../strings/Z3str2-bv/concat-032/test.c | 19 - .../Z3str2-bv/concat-032/test.c.qarr.smt2 | 309 -------- .../Z3str2-bv/concat-032/test.c.str.smt2 | 289 ------- .../strings/Z3str2-bv/concat-033/test.c | 14 - .../Z3str2-bv/concat-033/test.c.qarr.smt2 | 174 ----- .../Z3str2-bv/concat-033/test.c.str.smt2 | 142 ---- .../strings/Z3str2-bv/concat-034/test.c | 14 - .../Z3str2-bv/concat-034/test.c.qarr.smt2 | 209 ----- .../Z3str2-bv/concat-034/test.c.str.smt2 | 165 ---- .../strings/Z3str2-bv/concat-035/test.c | 16 - .../Z3str2-bv/concat-035/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-035/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-036/test.c | 15 - .../Z3str2-bv/concat-036/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-036/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/concat-037/test.c | 15 - .../Z3str2-bv/concat-037/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-037/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/concat-038/test.c | 16 - .../Z3str2-bv/concat-038/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-038/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-039/test.c | 16 - .../Z3str2-bv/concat-039/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-039/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-040/test.c | 16 - .../Z3str2-bv/concat-040/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-040/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-041/test.c | 16 - .../Z3str2-bv/concat-041/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-041/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-042/test.c | 15 - .../Z3str2-bv/concat-042/test.c.qarr.smt2 | 200 ----- .../Z3str2-bv/concat-042/test.c.str.smt2 | 160 ---- .../strings/Z3str2-bv/concat-043/test.c | 14 - .../Z3str2-bv/concat-043/test.c.qarr.smt2 | 174 ----- .../Z3str2-bv/concat-043/test.c.str.smt2 | 142 ---- .../strings/Z3str2-bv/concat-044/test.c | 15 - .../Z3str2-bv/concat-044/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-044/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/concat-045/test.c | 15 - .../Z3str2-bv/concat-045/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-045/test.c.str.smt2 | 203 ----- .../strings/Z3str2-bv/concat-046/test.c | 16 - .../Z3str2-bv/concat-046/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-046/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-047-unsat/test.c | 17 - .../concat-047-unsat/test.c.qarr.smt2 | 282 ------- .../concat-047-unsat/test.c.str.smt2 | 256 ------ .../strings/Z3str2-bv/concat-048/test.c | 16 - .../Z3str2-bv/concat-048/test.c.qarr.smt2 | 246 ------ .../Z3str2-bv/concat-048/test.c.str.smt2 | 218 ------ .../strings/Z3str2-bv/concat-049/test.c | 17 - .../Z3str2-bv/concat-049/test.c.qarr.smt2 | 282 ------- .../Z3str2-bv/concat-049/test.c.str.smt2 | 256 ------ .../strings/Z3str2-bv/concat-050/test.c | 14 - .../Z3str2-bv/concat-050/test.c.qarr.smt2 | 193 ----- .../Z3str2-bv/concat-050/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-051/test.c | 15 - .../Z3str2-bv/concat-051/test.c.qarr.smt2 | 229 ------ .../Z3str2-bv/concat-051/test.c.str.smt2 | 192 ----- .../strings/Z3str2-bv/concat-052/test.c | 15 - .../Z3str2-bv/concat-052/test.c.qarr.smt2 | 221 ------ .../Z3str2-bv/concat-052/test.c.str.smt2 | 191 ----- .../strings/Z3str2-bv/concat-053/test.c | 15 - .../Z3str2-bv/concat-053/test.c.qarr.smt2 | 230 ------ .../Z3str2-bv/concat-053/test.c.str.smt2 | 192 ----- .../strings/Z3str2-bv/concat-054-unsat/test.c | 14 - .../concat-054-unsat/test.c.qarr.smt2 | 194 ----- .../concat-054-unsat/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-055/test.c | 14 - .../Z3str2-bv/concat-055/test.c.qarr.smt2 | 197 ----- .../Z3str2-bv/concat-055/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-056/test.c | 15 - .../Z3str2-bv/concat-056/test.c.qarr.smt2 | 233 ------ .../Z3str2-bv/concat-056/test.c.str.smt2 | 192 ----- .../strings/Z3str2-bv/concat-057/test.c | 15 - .../Z3str2-bv/concat-057/test.c.qarr.smt2 | 233 ------ .../Z3str2-bv/concat-057/test.c.str.smt2 | 192 ----- .../strings/Z3str2-bv/concat-058/test.c | 14 - .../Z3str2-bv/concat-058/test.c.qarr.smt2 | 191 ----- .../Z3str2-bv/concat-058/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-059-unsat/test.c | 14 - .../concat-059-unsat/test.c.qarr.smt2 | 191 ----- .../concat-059-unsat/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-060/test.c | 14 - .../Z3str2-bv/concat-060/test.c.qarr.smt2 | 189 ----- .../Z3str2-bv/concat-060/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-061/test.c | 14 - .../Z3str2-bv/concat-061/test.c.qarr.smt2 | 193 ----- .../Z3str2-bv/concat-061/test.c.str.smt2 | 154 ---- .../strings/Z3str2-bv/concat-062/test.c | 15 - .../Z3str2-bv/concat-062/test.c.qarr.smt2 | 200 ----- .../Z3str2-bv/concat-062/test.c.str.smt2 | 160 ---- .../strings/Z3str2-bv/concat-063/test.c | 17 - .../Z3str2-bv/concat-063/test.c.qarr.smt2 | 272 ------- .../Z3str2-bv/concat-063/test.c.str.smt2 | 236 ------ .../strings/Z3str2-bv/concat-064/test.c | 15 - .../Z3str2-bv/concat-064/test.c.qarr.smt2 | 235 ------ .../Z3str2-bv/concat-064/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-065/test.c | 16 - .../Z3str2-bv/concat-065/test.c.qarr.smt2 | 271 ------- .../Z3str2-bv/concat-065/test.c.str.smt2 | 221 ------ .../strings/Z3str2-bv/concat-066/test.c | 15 - .../Z3str2-bv/concat-066/test.c.qarr.smt2 | 235 ------ .../Z3str2-bv/concat-066/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-067-unsat/test.c | 16 - .../concat-067-unsat/test.c.qarr.smt2 | 250 ------ .../concat-067-unsat/test.c.str.smt2 | 210 ----- .../strings/Z3str2-bv/concat-068/test.c | 16 - .../Z3str2-bv/concat-068/test.c.qarr.smt2 | 280 ------- .../Z3str2-bv/concat-068/test.c.str.smt2 | 240 ------ .../strings/Z3str2-bv/concat-069/test.c | 15 - .../Z3str2-bv/concat-069/test.c.qarr.smt2 | 235 ------ .../Z3str2-bv/concat-069/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-070/test.c | 15 - .../Z3str2-bv/concat-070/test.c.qarr.smt2 | 270 ------- .../Z3str2-bv/concat-070/test.c.str.smt2 | 206 ----- .../strings/Z3str2-bv/concat-071/test.c | 15 - .../Z3str2-bv/concat-071/test.c.qarr.smt2 | 238 ------ .../Z3str2-bv/concat-071/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/concat-072/test.c | 19 - .../Z3str2-bv/concat-072/test.c.qarr.smt2 | 325 -------- .../Z3str2-bv/concat-072/test.c.str.smt2 | 260 ------- .../strings/Z3str2-bv/concat-073/test.c | 18 - .../Z3str2-bv/concat-073/test.c.qarr.smt2 | 335 -------- .../Z3str2-bv/concat-073/test.c.str.smt2 | 267 ------- .../strings/Z3str2-bv/concat-074/test.c | 22 - .../Z3str2-bv/concat-074/test.c.qarr.smt2 | 537 ------------- .../Z3str2-bv/concat-074/test.c.str.smt2 | 423 ---------- .../strings/Z3str2-bv/concat-075/test.c | 17 - .../Z3str2-bv/concat-075/test.c.qarr.smt2 | 358 --------- .../Z3str2-bv/concat-075/test.c.str.smt2 | 284 ------- .../strings/Z3str2-bv/concat-076-unsat/test.c | 21 - .../concat-076-unsat/test.c.qarr.smt2 | 484 ------------ .../concat-076-unsat/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-077/test.c | 21 - .../Z3str2-bv/concat-077/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-077/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-078/test.c | 21 - .../Z3str2-bv/concat-078/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-078/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-079/test.c | 21 - .../Z3str2-bv/concat-079/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-079/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-080/test.c | 21 - .../Z3str2-bv/concat-080/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-080/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-081/test.c | 21 - .../Z3str2-bv/concat-081/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-081/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-082/test.c | 21 - .../Z3str2-bv/concat-082/test.c.qarr.smt2 | 484 ------------ .../Z3str2-bv/concat-082/test.c.str.smt2 | 388 --------- .../strings/Z3str2-bv/concat-083/test.c | 23 - .../Z3str2-bv/concat-083/test.c.qarr.smt2 | 498 ------------ .../Z3str2-bv/concat-083/test.c.str.smt2 | 402 ---------- .../strings/Z3str2-bv/concat-084/test.c | 24 - .../Z3str2-bv/concat-084/test.c.qarr.smt2 | 505 ------------ .../Z3str2-bv/concat-084/test.c.str.smt2 | 409 ---------- .../strings/Z3str2-bv/concat-085/test.c | 18 - .../Z3str2-bv/concat-085/test.c.qarr.smt2 | 385 --------- .../Z3str2-bv/concat-085/test.c.str.smt2 | 306 -------- .../strings/Z3str2-bv/concat-086/test.c | 23 - .../Z3str2-bv/concat-086/test.c.qarr.smt2 | 586 -------------- .../Z3str2-bv/concat-086/test.c.str.smt2 | 454 ----------- .../strings/Z3str2-bv/concat-087/test.c | 14 - .../Z3str2-bv/concat-087/test.c.qarr.smt2 | 259 ------ .../Z3str2-bv/concat-087/test.c.str.smt2 | 207 ----- .../strings/Z3str2-bv/concat-088/test.c | 16 - .../Z3str2-bv/concat-088/test.c.qarr.smt2 | 242 ------ .../Z3str2-bv/concat-088/test.c.str.smt2 | 200 ----- .../strings/Z3str2-bv/concat-089/test.c | 16 - .../Z3str2-bv/concat-089/test.c.qarr.smt2 | 296 ------- .../Z3str2-bv/concat-089/test.c.str.smt2 | 231 ------ .../strings/Z3str2-bv/concat-090/test.c | 18 - .../Z3str2-bv/concat-090/test.c.qarr.smt2 | 279 ------- .../Z3str2-bv/concat-090/test.c.str.smt2 | 221 ------ .../strings/Z3str2-bv/concat-091/test.c | 12 - .../Z3str2-bv/concat-091/test.c.qarr.smt2 | 172 ---- .../Z3str2-bv/concat-091/test.c.str.smt2 | 140 ---- .../strings/Z3str2-bv/concat-092/test.c | 14 - .../Z3str2-bv/concat-092/test.c.qarr.smt2 | 207 ----- .../Z3str2-bv/concat-092/test.c.str.smt2 | 165 ---- .../strings/Z3str2-bv/concat-093/test.c | 20 - .../Z3str2-bv/concat-093/test.c.qarr.smt2 | 448 ----------- .../Z3str2-bv/concat-093/test.c.str.smt2 | 350 --------- .../strings/Z3str2-bv/concat-094/test.c | 16 - .../Z3str2-bv/concat-094/test.c.qarr.smt2 | 0 .../Z3str2-bv/concat-094/test.c.str.smt2 | 0 .../strings/Z3str2-bv/concat-095/test.c | 15 - .../Z3str2-bv/concat-095/test.c.qarr.smt2 | 215 ----- .../Z3str2-bv/concat-095/test.c.str.smt2 | 173 ---- .../strings/Z3str2-bv/concat-096/test.c | 20 - .../Z3str2-bv/concat-096/test.c.qarr.smt2 | 445 ----------- .../Z3str2-bv/concat-096/test.c.str.smt2 | 350 --------- .../strings/Z3str2-bv/concat-097/test.c | 15 - .../Z3str2-bv/concat-097/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-097/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/concat-098/test.c | 15 - .../Z3str2-bv/concat-098/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-098/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/concat-099/test.c | 15 - .../Z3str2-bv/concat-099/test.c.qarr.smt2 | 210 ----- .../Z3str2-bv/concat-099/test.c.str.smt2 | 180 ----- .../strings/Z3str2-bv/length-001/test.c | 12 - .../Z3str2-bv/length-001/test.c.qarr.smt2 | 96 --- .../Z3str2-bv/length-001/test.c.str.smt2 | 100 --- .../strings/Z3str2-bv/length-002/test.c | 14 - .../Z3str2-bv/length-002/test.c.qarr.smt2 | 297 ------- .../Z3str2-bv/length-002/test.c.str.smt2 | 274 ------- .../strings/Z3str2-bv/length-003/test.c | 15 - .../Z3str2-bv/length-003/test.c.qarr.smt2 | 205 ----- .../Z3str2-bv/length-003/test.c.str.smt2 | 183 ----- .../strings/Z3str2-bv/length-004/test.c | 15 - .../Z3str2-bv/length-004/test.c.qarr.smt2 | 327 -------- .../Z3str2-bv/length-004/test.c.str.smt2 | 293 ------- .../strings/Z3str2-bv/length-005/test.c | 15 - .../Z3str2-bv/length-005/test.c.qarr.smt2 | 219 ------ .../Z3str2-bv/length-005/test.c.str.smt2 | 200 ----- .../strings/Z3str2-bv/length-006/test.c | 13 - .../Z3str2-bv/length-006/test.c.qarr.smt2 | 124 --- .../Z3str2-bv/length-006/test.c.str.smt2 | 118 --- .../strings/Z3str2-bv/length-007/test.c | 18 - .../Z3str2-bv/length-007/test.c.qarr.smt2 | 328 -------- .../Z3str2-bv/length-007/test.c.str.smt2 | 284 ------- .../strings/Z3str2-bv/length-008/test.c | 18 - .../Z3str2-bv/length-008/test.c.qarr.smt2 | 303 ------- .../Z3str2-bv/length-008/test.c.str.smt2 | 265 ------- .../strings/Z3str2-bv/length-009/test.c | 14 - .../Z3str2-bv/length-009/test.c.qarr.smt2 | 156 ---- .../Z3str2-bv/length-009/test.c.str.smt2 | 157 ---- 327 files changed, 55194 deletions(-) delete mode 100644 regression/strings/Z3str2-bv/concat-000/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-001/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-002/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-003/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-006/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-007/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-008/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-009/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-010/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-011/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-012/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-013/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-014/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-015/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-017/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-018/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-020/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-021/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-022/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-023/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-024/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-025/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-026/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-027/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-028/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-029/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-030/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-031/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-032/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-033/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-034/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-035/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-036/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-037/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-038/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-039/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-040/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-041/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-042/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-043/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-044/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-045/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-046/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-048/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-049/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-050/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-051/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-052/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-053/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-055/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-056/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-057/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-058/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-060/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-061/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-062/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-063/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-064/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-065/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-066/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-068/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-069/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-070/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-071/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-072/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-073/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-074/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-075/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-077/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-078/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-079/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-080/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-081/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-082/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-083/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-084/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-085/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-086/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-087/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-088/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-089/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-090/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-091/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-092/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-093/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-094/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-095/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-096/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-097/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-098/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-099/test.c delete mode 100644 regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-001/test.c delete mode 100644 regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-001/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-002/test.c delete mode 100644 regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-002/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-003/test.c delete mode 100644 regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-003/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-004/test.c delete mode 100644 regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-004/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-005/test.c delete mode 100644 regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-005/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-006/test.c delete mode 100644 regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-006/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-007/test.c delete mode 100644 regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-007/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-008/test.c delete mode 100644 regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-008/test.c.str.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-009/test.c delete mode 100644 regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 delete mode 100644 regression/strings/Z3str2-bv/length-009/test.c.str.smt2 diff --git a/regression/strings/Z3str2-bv/concat-000/test.c b/regression/strings/Z3str2-bv/concat-000/test.c deleted file mode 100644 index 105b5c455be..00000000000 --- a/regression/strings/Z3str2-bv/concat-000/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string c1; - __CPROVER_string c2; - __CPROVER_string x; - - if (__CPROVER_string_equal(a, __CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("te"), c1), __CPROVER_string_concat(__CPROVER_string_literal(" "), c2))) - && __CPROVER_string_equal(a, b) - && __CPROVER_string_equal(x, __CPROVER_string_literal("str "))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 deleted file mode 100644 index 2dba740a907..00000000000 --- a/regression/strings/Z3str2-bv/concat-000/test.c.qarr.smt2 +++ /dev/null @@ -1,332 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::c1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::c1!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv9 8))) -(assert (= (cprover.str.len string.3) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::c2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::c2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.4) - -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::a!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.6)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::1::a!0@1#1|) -(define-fun string_equal.s2.7 () cprover.String |main::1::b!0@1#1|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.7)) - -(declare-fun string.8 () cprover.String) -(assert (= (select string.8 (_ bv0 32)) (_ bv115 8))) -(assert (= (select string.8 (_ bv1 32)) (_ bv116 8))) -(assert (= (select string.8 (_ bv2 32)) (_ bv114 8))) -(assert (= (select string.8 (_ bv3 32)) (_ bv32 8))) -(assert (= (select string.8 (_ bv4 32)) (_ bv32 8))) -(assert (= (cprover.str.len string.8) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.8) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.9 () Bool) -(define-fun string_equal.s1.9 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.9 () cprover.Pos) -(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) -(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) -(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.9)) - -; convert -(define-fun |B9| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::c1!0@1#1| |main::1::c1!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::c2!0@1#1| |main::1::c2!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::c1!0@1#1|)) -(get-value (|main::1::c2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 deleted file mode 100644 index 72d69607640..00000000000 --- a/regression/strings/Z3str2-bv/concat-000/test.c.str.smt2 +++ /dev/null @@ -1,263 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "te") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::c1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::c1!0@1#1|)) - -(define-fun string.2 () cprover.String " ") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::c2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::c2!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::a!0@1#1| |main::1::b!0@1#1|))) - -(define-fun string.3 () cprover.String "str ") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B9| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::c1!0@1#1| |main::1::c1!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::c2!0@1#1| |main::1::c2!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::c1!0@1#1|)) -(get-value (|main::1::c2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-001/test.c b/regression/strings/Z3str2-bv/concat-001/test.c deleted file mode 100644 index 0ae5dc8bd85..00000000000 --- a/regression/strings/Z3str2-bv/concat-001/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y1; - __CPROVER_string y2; - - if (__CPROVER_string_equal(x, __CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("te"), y1), __CPROVER_string_concat(__CPROVER_string_literal("st"), y2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 deleted file mode 100644 index 3f82208c20f..00000000000 --- a/regression/strings/Z3str2-bv/concat-001/test.c.qarr.smt2 +++ /dev/null @@ -1,209 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y1!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.3) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 deleted file mode 100644 index 5959a91332f..00000000000 --- a/regression/strings/Z3str2-bv/concat-001/test.c.str.smt2 +++ /dev/null @@ -1,165 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "te") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::y1!0@1#1|)) - -(define-fun string.2 () cprover.String "st") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y2!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-002/test.c b/regression/strings/Z3str2-bv/concat-002/test.c deleted file mode 100644 index 7b7c156a178..00000000000 --- a/regression/strings/Z3str2-bv/concat-002/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - unsigned int i; - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(x, y), z), __CPROVER_string_literal("teest")) - && __CPROVER_string_equal(y, __CPROVER_string_literal("es")) - && (i == 15)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 deleted file mode 100644 index 4ff3fcefbee..00000000000 --- a/regression/strings/Z3str2-bv/concat-002/test.c.qarr.smt2 +++ /dev/null @@ -1,265 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.3) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv115 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::1::i!0@1#1| (_ bv15 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B19| () Bool (not (= |main::1::i!0@1#1| (_ bv15 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 deleted file mode 100644 index 72e65b6b8a1..00000000000 --- a/regression/strings/Z3str2-bv/concat-002/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::1::z!0@1#1|)) - -(define-fun string.1 () cprover.String "teest") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) - -(define-fun string.2 () cprover.String "es") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::1::i!0@1#1| (_ bv15 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B19| () Bool (not (= |main::1::i!0@1#1| (_ bv15 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-003/test.c b/regression/strings/Z3str2-bv/concat-003/test.c deleted file mode 100644 index 9c120c645ad..00000000000 --- a/regression/strings/Z3str2-bv/concat-003/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("testhello")) - && __CPROVER_string_equal(a, __CPROVER_string_literal("testhe"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 deleted file mode 100644 index 82e5caa33a7..00000000000 --- a/regression/strings/Z3str2-bv/concat-003/test.c.qarr.smt2 +++ /dev/null @@ -1,228 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.2) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.4 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.4 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.4 (_ bv5 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.4) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::a!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) - -; convert -(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 deleted file mode 100644 index ea25844d65c..00000000000 --- a/regression/strings/Z3str2-bv/concat-003/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) - -(define-fun string.1 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) - -(define-fun string.2 () cprover.String "testhe") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c b/regression/strings/Z3str2-bv/concat-004-unsat/test.c deleted file mode 100644 index c1104b203fa..00000000000 --- a/regression/strings/Z3str2-bv/concat-004-unsat/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("testhello")) - && __CPROVER_string_equal(a, __CPROVER_string_literal("hello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 deleted file mode 100644 index 8f9f5409883..00000000000 --- a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,227 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.2) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv108 8))) -(assert (= (select string.4 (_ bv3 32)) (_ bv108 8))) -(assert (= (select string.4 (_ bv4 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.4) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::a!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) - -; convert -(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 deleted file mode 100644 index 01d6b232377..00000000000 --- a/regression/strings/Z3str2-bv/concat-004-unsat/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) - -(define-fun string.1 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) - -(define-fun string.2 () cprover.String "hello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B6| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c b/regression/strings/Z3str2-bv/concat-005-unsat/test.c deleted file mode 100644 index 56a8f70044a..00000000000 --- a/regression/strings/Z3str2-bv/concat-005-unsat/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("testhello")), __CPROVER_string_literal("hello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 deleted file mode 100644 index 5677114260a..00000000000 --- a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,177 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.1) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.3) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 deleted file mode 100644 index 8a8287c4fac..00000000000 --- a/regression/strings/Z3str2-bv/concat-005-unsat/test.c.str.smt2 +++ /dev/null @@ -1,143 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "hello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-006/test.c b/regression/strings/Z3str2-bv/concat-006/test.c deleted file mode 100644 index af55bc5fd47..00000000000 --- a/regression/strings/Z3str2-bv/concat-006/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("hello")), __CPROVER_string_literal("testhello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 deleted file mode 100644 index 1c3ade89513..00000000000 --- a/regression/strings/Z3str2-bv/concat-006/test.c.qarr.smt2 +++ /dev/null @@ -1,177 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.1) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.3) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 deleted file mode 100644 index 679fde9eee0..00000000000 --- a/regression/strings/Z3str2-bv/concat-006/test.c.str.smt2 +++ /dev/null @@ -1,143 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "hello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-007/test.c b/regression/strings/Z3str2-bv/concat-007/test.c deleted file mode 100644 index e11738b5404..00000000000 --- a/regression/strings/Z3str2-bv/concat-007/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), a), __CPROVER_string_literal("testhello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 deleted file mode 100644 index ecc59e9a31e..00000000000 --- a/regression/strings/Z3str2-bv/concat-007/test.c.qarr.smt2 +++ /dev/null @@ -1,176 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.3) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 deleted file mode 100644 index 4ee780177da..00000000000 --- a/regression/strings/Z3str2-bv/concat-007/test.c.str.smt2 +++ /dev/null @@ -1,143 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "test") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) - -(define-fun string.2 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-008/test.c b/regression/strings/Z3str2-bv/concat-008/test.c deleted file mode 100644 index 2e71ae65422..00000000000 --- a/regression/strings/Z3str2-bv/concat-008/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(__CPROVER_string_literal("test"), a), __CPROVER_string_literal("num")), __CPROVER_string_literal("testhellonum"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 deleted file mode 100644 index 1be473a8f81..00000000000 --- a/regression/strings/Z3str2-bv/concat-008/test.c.qarr.smt2 +++ /dev/null @@ -1,216 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) -(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) -(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) -(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.5) (_ bv12 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 deleted file mode 100644 index 9257d341cdc..00000000000 --- a/regression/strings/Z3str2-bv/concat-008/test.c.str.smt2 +++ /dev/null @@ -1,166 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "test") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) - -(define-fun string.2 () cprover.String "num") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -(define-fun string.3 () cprover.String "testhellonum") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-009/test.c b/regression/strings/Z3str2-bv/concat-009/test.c deleted file mode 100644 index 32642a3edcb..00000000000 --- a/regression/strings/Z3str2-bv/concat-009/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(a, __CPROVER_string_literal("hello")), __CPROVER_string_literal("num")), __CPROVER_string_literal("testhellonum"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 deleted file mode 100644 index 9fff1e965a8..00000000000 --- a/regression/strings/Z3str2-bv/concat-009/test.c.qarr.smt2 +++ /dev/null @@ -1,217 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.1) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) -(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) -(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) -(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.5) (_ bv12 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 deleted file mode 100644 index 3e566a08d55..00000000000 --- a/regression/strings/Z3str2-bv/concat-009/test.c.str.smt2 +++ /dev/null @@ -1,166 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "hello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "num") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -(define-fun string.3 () cprover.String "testhellonum") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-010/test.c b/regression/strings/Z3str2-bv/concat-010/test.c deleted file mode 100644 index 69406aa5cb6..00000000000 --- a/regression/strings/Z3str2-bv/concat-010/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), __CPROVER_string_concat(a, __CPROVER_string_literal("num"))), __CPROVER_string_literal("testhellonum"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 deleted file mode 100644 index 6a3a02ae1e7..00000000000 --- a/regression/strings/Z3str2-bv/concat-010/test.c.qarr.smt2 +++ /dev/null @@ -1,216 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv110 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv117 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) -(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) -(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) -(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.5) (_ bv12 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 deleted file mode 100644 index cecda085b42..00000000000 --- a/regression/strings/Z3str2-bv/concat-010/test.c.str.smt2 +++ /dev/null @@ -1,166 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "test") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(define-fun string.2 () cprover.String "num") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -(define-fun string.3 () cprover.String "testhellonum") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-011/test.c b/regression/strings/Z3str2-bv/concat-011/test.c deleted file mode 100644 index de7eff6bb9a..00000000000 --- a/regression/strings/Z3str2-bv/concat-011/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("test"), __CPROVER_string_concat(__CPROVER_string_literal("hello"), a)), __CPROVER_string_literal("testhellonum"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 deleted file mode 100644 index d005c8e8483..00000000000 --- a/regression/strings/Z3str2-bv/concat-011/test.c.qarr.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv3 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv4 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.2) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::a!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.5 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.5 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.5 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv8 32)) (_ bv111 8))) -(assert (= (select string.5 (_ bv9 32)) (_ bv110 8))) -(assert (= (select string.5 (_ bv10 32)) (_ bv117 8))) -(assert (= (select string.5 (_ bv11 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.5) (_ bv12 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 deleted file mode 100644 index 1dc16a33d95..00000000000 --- a/regression/strings/Z3str2-bv/concat-011/test.c.str.smt2 +++ /dev/null @@ -1,166 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "test") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(define-fun string.2 () cprover.String "hello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::a!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -(define-fun string.3 () cprover.String "testhellonum") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-012/test.c b/regression/strings/Z3str2-bv/concat-012/test.c deleted file mode 100644 index dc625f28b85..00000000000 --- a/regression/strings/Z3str2-bv/concat-012/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_literal("testnumnum"), __CPROVER_string_concat(y, __CPROVER_string_concat(__CPROVER_string_literal("num"), x)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 deleted file mode 100644 index 1382996a800..00000000000 --- a/regression/strings/Z3str2-bv/concat-012/test.c.qarr.smt2 +++ /dev/null @@ -1,197 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv110 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv117 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv109 8))) -(assert (= (select string.1 (_ bv7 32)) (_ bv110 8))) -(assert (= (select string.1 (_ bv8 32)) (_ bv117 8))) -(assert (= (select string.1 (_ bv9 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.1) (_ bv10 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv110 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv117 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 deleted file mode 100644 index f8f8d41d1b8..00000000000 --- a/regression/strings/Z3str2-bv/concat-012/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "testnumnum") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(define-fun string.2 () cprover.String "num") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-013/test.c b/regression/strings/Z3str2-bv/concat-013/test.c deleted file mode 100644 index fbafb1aebbb..00000000000 --- a/regression/strings/Z3str2-bv/concat-013/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(z, __CPROVER_string_literal("b")), __CPROVER_string_concat(x, y)) - && __CPROVER_string_equal(z, __CPROVER_string_literal(""))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 deleted file mode 100644 index c59b0066b7d..00000000000 --- a/regression/strings/Z3str2-bv/concat-013/test.c.qarr.smt2 +++ /dev/null @@ -1,235 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (cprover.str.len string.5) (_ bv0 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) - -; convert -(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 deleted file mode 100644 index 92976a579e5..00000000000 --- a/regression/strings/Z3str2-bv/concat-013/test.c.str.smt2 +++ /dev/null @@ -1,194 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(define-fun string.2 () cprover.String "") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-014/test.c b/regression/strings/Z3str2-bv/concat-014/test.c deleted file mode 100644 index a90a5b29642..00000000000 --- a/regression/strings/Z3str2-bv/concat-014/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("")), __CPROVER_string_literal("num"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 deleted file mode 100644 index d0d99ad9e47..00000000000 --- a/regression/strings/Z3str2-bv/concat-014/test.c.qarr.smt2 +++ /dev/null @@ -1,152 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (cprover.str.len string.1) (_ bv0 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv110 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv117 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv109 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 deleted file mode 100644 index e63b9557c22..00000000000 --- a/regression/strings/Z3str2-bv/concat-014/test.c.str.smt2 +++ /dev/null @@ -1,129 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "num") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-015/test.c b/regression/strings/Z3str2-bv/concat-015/test.c deleted file mode 100644 index b6659c70a21..00000000000 --- a/regression/strings/Z3str2-bv/concat-015/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - - if ((__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal("te")) || __CPROVER_string_equal(__CPROVER_string_concat(b, a), __CPROVER_string_literal("te"))) - && __CPROVER_string_equal(b, __CPROVER_string_literal("t"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 deleted file mode 100644 index 68f12aad014..00000000000 --- a/regression/strings/Z3str2-bv/concat-015/test.c.qarr.smt2 +++ /dev/null @@ -1,348 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$9!0@1#5| () Bool) -; convert -(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B10| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B11| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B12| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B13| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B14| () Bool (and |main::$tmp::tmp_if_expr$9!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.2) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$9!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#3| () Bool |main::$tmp::tmp_if_expr$9!0@1#1|) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::b!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::a!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.4) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool string_equal.5) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$9!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::tmp_if_expr$9!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -(declare-fun string.6 () cprover.String) -(assert (= (select string.6 (_ bv0 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.6) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::1::b!0@1#1|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.7)) - -; convert -(define-fun |B15| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::$tmp::tmp_if_expr$9!0@1#1| |main::$tmp::tmp_if_expr$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::tmp_if_expr$9!0@1#5|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::tmp_if_expr$9!0@1#5|)) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#5|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 deleted file mode 100644 index e2e6a109e26..00000000000 --- a/regression/strings/Z3str2-bv/concat-015/test.c.str.smt2 +++ /dev/null @@ -1,295 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$9!0@1#5| () Bool) -; convert -(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B10| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B11| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B12| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; convert -(define-fun |B13| () Bool |main::$tmp::tmp_if_expr$9!0@1#5|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B14| () Bool (and |main::$tmp::tmp_if_expr$9!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) - -(define-fun string.1 () cprover.String "te") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$9!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#3| () Bool |main::$tmp::tmp_if_expr$9!0@1#1|) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::b!0@1#1| |main::1::a!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$9!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$9!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::tmp_if_expr$9!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -(define-fun string.2 () cprover.String "t") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::b!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B15| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::$tmp::tmp_if_expr$9!0@1#1| |main::$tmp::tmp_if_expr$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::tmp_if_expr$9!0@1#5|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::tmp_if_expr$9!0@1#5|)) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$9!0@1#5|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c b/regression/strings/Z3str2-bv/concat-016-unsat/test.c deleted file mode 100644 index 827ed8e012b..00000000000 --- a/regression/strings/Z3str2-bv/concat-016-unsat/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("tesk"), a), __CPROVER_string_literal("testhello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 deleted file mode 100644 index 95c403a48d2..00000000000 --- a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,162 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv107 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::a!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.3) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 deleted file mode 100644 index f6712996e9f..00000000000 --- a/regression/strings/Z3str2-bv/concat-016-unsat/test.c.str.smt2 +++ /dev/null @@ -1,129 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "tesk") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::a!0@1#1|)) - -(define-fun string.2 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-017/test.c b/regression/strings/Z3str2-bv/concat-017/test.c deleted file mode 100644 index b3b171a866e..00000000000 --- a/regression/strings/Z3str2-bv/concat-017/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("llo")), __CPROVER_string_literal("testhello"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 deleted file mode 100644 index ab40285d91f..00000000000 --- a/regression/strings/Z3str2-bv/concat-017/test.c.qarr.smt2 +++ /dev/null @@ -1,161 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.3 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.3) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 deleted file mode 100644 index 1bac9f0c4ba..00000000000 --- a/regression/strings/Z3str2-bv/concat-017/test.c.str.smt2 +++ /dev/null @@ -1,129 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "llo") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-018/test.c b/regression/strings/Z3str2-bv/concat-018/test.c deleted file mode 100644 index 91300ceb58a..00000000000 --- a/regression/strings/Z3str2-bv/concat-018/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_literal("testHello")) - && __CPROVER_string_equal(__CPROVER_string_concat(y, z), __CPROVER_string_literal("low")) - && !(__CPROVER_string_equal(y, __CPROVER_string_literal("")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 deleted file mode 100644 index f8f5ac4597e..00000000000 --- a/regression/strings/Z3str2-bv/concat-018/test.c.qarr.smt2 +++ /dev/null @@ -1,317 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv4 32)) (_ bv72 8))) -(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.2) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.4) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv108 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv111 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv119 8))) -(assert (= (cprover.str.len string.5) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.6)) - -(declare-fun string.7 () cprover.String) -(assert (= (cprover.str.len string.7) (_ bv0 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.8)) - -; convert -(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to false -(assert (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B26| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 deleted file mode 100644 index c4cdc8cc946..00000000000 --- a/regression/strings/Z3str2-bv/concat-018/test.c.str.smt2 +++ /dev/null @@ -1,254 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "testHello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|))) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::z!0@1#1|)) - -(define-fun string.2 () cprover.String "low") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|))) - -(define-fun string.3 () cprover.String "") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B13| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to false -(assert (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B26| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c b/regression/strings/Z3str2-bv/concat-019-unsat/test.c deleted file mode 100644 index 10da2f53dfe..00000000000 --- a/regression/strings/Z3str2-bv/concat-019-unsat/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, __CPROVER_string_literal("testhello")), __CPROVER_string_literal("test"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 deleted file mode 100644 index 4ed3a39c28e..00000000000 --- a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,162 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.1 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.1) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv116 8))) -(assert (= (cprover.str.len string.3) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 deleted file mode 100644 index d8c4273632b..00000000000 --- a/regression/strings/Z3str2-bv/concat-019-unsat/test.c.str.smt2 +++ /dev/null @@ -1,129 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "test") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-020/test.c b/regression/strings/Z3str2-bv/concat-020/test.c deleted file mode 100644 index 6b607881a14..00000000000 --- a/regression/strings/Z3str2-bv/concat-020/test.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string a; - __CPROVER_string b; - - if (__CPROVER_string_equal(__CPROVER_string_concat(a, b), __CPROVER_string_literal(""))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 deleted file mode 100644 index ff3a96e628a..00000000000 --- a/regression/strings/Z3str2-bv/concat-020/test.c.qarr.smt2 +++ /dev/null @@ -1,143 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::a!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::b!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (cprover.str.len string.2) (_ bv0 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.3)) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 deleted file mode 100644 index 01859168f67..00000000000 --- a/regression/strings/Z3str2-bv/concat-020/test.c.str.smt2 +++ /dev/null @@ -1,124 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::a!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::b!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::a!0@1#1| |main::1::b!0@1#1|)) - -(define-fun string.1 () cprover.String "") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::a!0@1#1| |main::1::a!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::b!0@1#1| |main::1::b!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::a!0@1#1|)) -(get-value (|main::1::b!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-021/test.c b/regression/strings/Z3str2-bv/concat-021/test.c deleted file mode 100644 index 27ec8cbdcdf..00000000000 --- a/regression/strings/Z3str2-bv/concat-021/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), z) - && __CPROVER_string_equal(z, __CPROVER_string_literal("abcdef")) - && (__CPROVER_string_equal(x, __CPROVER_string_literal("abc")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcdef")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 deleted file mode 100644 index b06fdaa79db..00000000000 --- a/regression/strings/Z3str2-bv/concat-021/test.c.qarr.smt2 +++ /dev/null @@ -1,500 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) -; convert -(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$8!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.2 () Bool) -(define-fun string_equal.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(define-fun string_equal.s2.2 () cprover.String |main::1::z!0@1#1|) -(declare-fun string_equal.idx.2 () cprover.Pos) -(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) -(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) -(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.2)) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.3) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.5) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.6)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(declare-fun string.7 () cprover.String) -(assert (= (select string.7 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.7 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.7 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.7) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.8) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.9 () Bool) -(define-fun string_equal.s1.9 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(declare-fun string_equal.idx.9 () cprover.Pos) -(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) -(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) -(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool string_equal.9) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) - -; convert -(define-fun |B29| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B38| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B41| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$8!0@1#5|) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B47| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B48| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 deleted file mode 100644 index 98ae9be8b43..00000000000 --- a/regression/strings/Z3str2-bv/concat-021/test.c.str.smt2 +++ /dev/null @@ -1,426 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) -; convert -(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::tmp_if_expr$8!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| |main::1::z!0@1#1|))) - -(define-fun string.1 () cprover.String "abcdef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|))) - -(define-fun string.2 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(define-fun string.3 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) - -; convert -(define-fun |B29| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B38| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B41| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$8!0@1#5|) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B47| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B48| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-022/test.c b/regression/strings/Z3str2-bv/concat-022/test.c deleted file mode 100644 index 778f04b5f95..00000000000 --- a/regression/strings/Z3str2-bv/concat-022/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), z) - && (__CPROVER_string_equal(z, __CPROVER_string_literal("abcdef")) || __CPROVER_string_equal(z, __CPROVER_string_literal("aaaa")) || __CPROVER_string_equal(z, __CPROVER_string_literal("bbbb"))) - && (__CPROVER_string_equal(x, __CPROVER_string_literal("e")) || __CPROVER_string_equal(x, __CPROVER_string_literal("f")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcde")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 deleted file mode 100644 index 55215d5eb3c..00000000000 --- a/regression/strings/Z3str2-bv/concat-022/test.c.qarr.smt2 +++ /dev/null @@ -1,736 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B13| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B14| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$13!0@1#5| () Bool) -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B22| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$16!0@1#5| () Bool) -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B29| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B30| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B31| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B32| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B33| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B34| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B35| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B36| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B37| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B38| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B39| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B40| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B41| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B42| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B43| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B44| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B45| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) -; convert -(define-fun |B46| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.2 () Bool) -(define-fun string_equal.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|) -(define-fun string_equal.s2.2 () cprover.String |main::1::z!0@1#1|) -(declare-fun string_equal.idx.2 () cprover.Pos) -(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) -(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) -(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| string_equal.2)) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.3) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$13!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#3| () Bool |main::$tmp::tmp_if_expr$13!0@1#1|) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv97 8))) -(assert (= (select string.5 (_ bv2 32)) (_ bv97 8))) -(assert (= (select string.5 (_ bv3 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.5) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2| () cprover.String string.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool string_equal.6) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$13!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$16!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#3| () Bool |main::$tmp::tmp_if_expr$16!0@1#1|) - -(declare-fun string.7 () cprover.String) -(assert (= (select string.7 (_ bv0 32)) (_ bv98 8))) -(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.7 (_ bv2 32)) (_ bv98 8))) -(assert (= (select string.7 (_ bv3 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.7) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2| () cprover.String string.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2| () Bool string_equal.8) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$16!0@1#5| (or |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::tmp_if_expr$16!0@1#4|))) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) - -; string equal -(declare-fun string_equal.10 () Bool) -(define-fun string_equal.s1.10 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.10 () cprover.Pos) -(assert (=> string_equal.10 (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.10 (bvult ?n (cprover.str.len string_equal.s1.10))) (= (select string_equal.s1.10 ?n) (select string_equal.s2.10 ?n))))) -(assert (=> (not string_equal.10) (or (not (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10))) -(and (bvult string_equal.idx.10 (cprover.str.len string_equal.s1.10)) (not (= (select string_equal.s1.10 string_equal.idx.10) (select string_equal.s2.10 string_equal.idx.10))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.10)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(declare-fun string.11 () cprover.String) -(assert (= (select string.11 (_ bv0 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.11) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.12) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) - -(declare-fun string.13 () cprover.String) -(assert (= (select string.13 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.13 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.13 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.13 (_ bv3 32)) (_ bv100 8))) -(assert (= (select string.13 (_ bv4 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.13) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.13) - -; string equal -(declare-fun string_equal.14 () Bool) -(define-fun string_equal.s1.14 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(declare-fun string_equal.idx.14 () cprover.Pos) -(assert (=> string_equal.14 (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.14 (bvult ?n (cprover.str.len string_equal.s1.14))) (= (select string_equal.s1.14 ?n) (select string_equal.s2.14 ?n))))) -(assert (=> (not string_equal.14) (or (not (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14))) -(and (bvult string_equal.idx.14 (cprover.str.len string_equal.s1.14)) (not (= (select string_equal.s1.14 string_equal.idx.14) (select string_equal.s2.14 string_equal.idx.14))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool string_equal.14) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) - -; convert -(define-fun |B47| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B48| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B49| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| () cprover.String) -; convert -(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| () Bool) -; convert -(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B53| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; convert -(define-fun |B54| () Bool (= |main::$tmp::tmp_if_expr$13!0@1#1| |main::$tmp::tmp_if_expr$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| () cprover.String) -; convert -(define-fun |B55| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B56| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; convert -(define-fun |B57| () Bool (= |main::$tmp::tmp_if_expr$16!0@1#1| |main::$tmp::tmp_if_expr$16!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| () cprover.String) -; convert -(define-fun |B58| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| () Bool) -; convert -(define-fun |B59| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B60| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B61| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B62| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B63| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B64| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B65| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B66| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B67| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$16!0@1#5|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$8!0@1#5|) - -; convert -(define-fun |B68| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) - -; convert -(define-fun |B69| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B70| () Bool (not |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B71| () Bool (not |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B72| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B73| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B74| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B53|)) -(get-value (|B54|)) -(get-value (|B55|)) -(get-value (|B56|)) -(get-value (|B57|)) -(get-value (|B58|)) -(get-value (|B59|)) -(get-value (|B6|)) -(get-value (|B60|)) -(get-value (|B61|)) -(get-value (|B62|)) -(get-value (|B63|)) -(get-value (|B64|)) -(get-value (|B65|)) -(get-value (|B66|)) -(get-value (|B67|)) -(get-value (|B68|)) -(get-value (|B69|)) -(get-value (|B7|)) -(get-value (|B70|)) -(get-value (|B71|)) -(get-value (|B72|)) -(get-value (|B73|)) -(get-value (|B74|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 deleted file mode 100644 index 81235191e30..00000000000 --- a/regression/strings/Z3str2-bv/concat-022/test.c.str.smt2 +++ /dev/null @@ -1,631 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|))) - -; convert -(define-fun |B13| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; convert -(define-fun |B14| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$13!0@1#5| () Bool) -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (not |main::$tmp::tmp_if_expr$13!0@1#5|))) - -; convert -(define-fun |B22| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$16!0@1#5| () Bool) -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B28| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B29| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B30| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B31| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B32| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B33| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B34| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B35| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B36| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B37| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B38| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B39| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B40| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B41| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B42| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B43| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B44| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| (not |main::$tmp::tmp_if_expr$5!0@1#5|))) - -; convert -(define-fun |B45| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#5| () Bool) -; convert -(define-fun |B46| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| |main::$tmp::tmp_if_expr$16!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2| |main::1::z!0@1#1|))) - -(define-fun string.1 () cprover.String "abcdef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$13!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#3| () Bool |main::$tmp::tmp_if_expr$13!0@1#1|) - -(define-fun string.2 () cprover.String "aaaa") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$13!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$13!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::tmp_if_expr$13!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$16!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#3| () Bool |main::$tmp::tmp_if_expr$16!0@1#1|) - -(define-fun string.3 () cprover.String "bbbb") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2| () cprover.String string.3) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2| () Bool (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$16!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$16!0@1#5| (or |main::$tmp::tmp_if_expr$13!0@1#5| |main::$tmp::tmp_if_expr$16!0@1#4|))) - -(define-fun string.4 () cprover.String "e") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(define-fun string.5 () cprover.String "f") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.5) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$8!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#3| () Bool |main::$tmp::tmp_if_expr$8!0@1#1|) - -(define-fun string.6 () cprover.String "abcde") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.6) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$8!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3| () Bool (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3| () cprover.String (ite |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$8!0@1#5| (or |main::$tmp::tmp_if_expr$5!0@1#5| |main::$tmp::tmp_if_expr$8!0@1#4|))) - -; convert -(define-fun |B47| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B48| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B49| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| () cprover.String) -; convert -(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| () Bool) -; convert -(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B53| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; convert -(define-fun |B54| () Bool (= |main::$tmp::tmp_if_expr$13!0@1#1| |main::$tmp::tmp_if_expr$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| () cprover.String) -; convert -(define-fun |B55| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B56| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; convert -(define-fun |B57| () Bool (= |main::$tmp::tmp_if_expr$16!0@1#1| |main::$tmp::tmp_if_expr$16!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| () cprover.String) -; convert -(define-fun |B58| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| () Bool) -; convert -(define-fun |B59| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B60| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B61| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B62| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B63| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B64| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B65| () Bool (= |main::$tmp::tmp_if_expr$8!0@1#1| |main::$tmp::tmp_if_expr$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B66| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B67| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$16!0@1#5|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$8!0@1#5|) - -; convert -(define-fun |B68| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) - -; convert -(define-fun |B69| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B70| () Bool (not |main::$tmp::tmp_if_expr$13!0@1#5|)) - -; convert -(define-fun |B71| () Bool (not |main::$tmp::tmp_if_expr$16!0@1#5|)) - -; convert -(define-fun |B72| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B73| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; convert -(define-fun |B74| () Bool (not |main::$tmp::tmp_if_expr$8!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B53|)) -(get-value (|B54|)) -(get-value (|B55|)) -(get-value (|B56|)) -(get-value (|B57|)) -(get-value (|B58|)) -(get-value (|B59|)) -(get-value (|B6|)) -(get-value (|B60|)) -(get-value (|B61|)) -(get-value (|B62|)) -(get-value (|B63|)) -(get-value (|B64|)) -(get-value (|B65|)) -(get-value (|B66|)) -(get-value (|B67|)) -(get-value (|B68|)) -(get-value (|B69|)) -(get-value (|B7|)) -(get-value (|B70|)) -(get-value (|B71|)) -(get-value (|B72|)) -(get-value (|B73|)) -(get-value (|B74|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$17!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$15!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$18!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$11!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$14!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$13!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$16!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$8!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-023/test.c b/regression/strings/Z3str2-bv/concat-023/test.c deleted file mode 100644 index e4e710d7720..00000000000 --- a/regression/strings/Z3str2-bv/concat-023/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 0) - && (__CPROVER_string_length(y) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 deleted file mode 100644 index 3ec2a51b2d3..00000000000 --- a/regression/strings/Z3str2-bv/concat-023/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 deleted file mode 100644 index 000fe43ee4e..00000000000 --- a/regression/strings/Z3str2-bv/concat-023/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-024/test.c b/regression/strings/Z3str2-bv/concat-024/test.c deleted file mode 100644 index 5bcc2c7b435..00000000000 --- a/regression/strings/Z3str2-bv/concat-024/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 deleted file mode 100644 index 7533db9ce02..00000000000 --- a/regression/strings/Z3str2-bv/concat-024/test.c.qarr.smt2 +++ /dev/null @@ -1,165 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.3)) - -; convert -(define-fun |B1| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 deleted file mode 100644 index 2c6a5a9de83..00000000000 --- a/regression/strings/Z3str2-bv/concat-024/test.c.str.smt2 +++ /dev/null @@ -1,137 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-025/test.c b/regression/strings/Z3str2-bv/concat-025/test.c deleted file mode 100644 index e275b5a658d..00000000000 --- a/regression/strings/Z3str2-bv/concat-025/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - unsigned int i; - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == i) - && (__CPROVER_string_length(y) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 deleted file mode 100644 index cc3ebe266c2..00000000000 --- a/regression/strings/Z3str2-bv/concat-025/test.c.qarr.smt2 +++ /dev/null @@ -1,244 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) - -; convert -(define-fun |B19| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 deleted file mode 100644 index ff53496d485..00000000000 --- a/regression/strings/Z3str2-bv/concat-025/test.c.str.smt2 +++ /dev/null @@ -1,220 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| |main::1::i!0@1#1|))) - -; convert -(define-fun |B19| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-026/test.c b/regression/strings/Z3str2-bv/concat-026/test.c deleted file mode 100644 index a1818ea5c83..00000000000 --- a/regression/strings/Z3str2-bv/concat-026/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) - && (__CPROVER_string_length(x) == 1) - && (__CPROVER_string_length(m) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 deleted file mode 100644 index a3929a6542f..00000000000 --- a/regression/strings/Z3str2-bv/concat-026/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 deleted file mode 100644 index 155fad7d0ea..00000000000 --- a/regression/strings/Z3str2-bv/concat-026/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::m!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-027/test.c b/regression/strings/Z3str2-bv/concat-027/test.c deleted file mode 100644 index 0591685ce58..00000000000 --- a/regression/strings/Z3str2-bv/concat-027/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 1) - && (__CPROVER_string_length(y) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 deleted file mode 100644 index 83db9e2b8ee..00000000000 --- a/regression/strings/Z3str2-bv/concat-027/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 deleted file mode 100644 index 6680e77074f..00000000000 --- a/regression/strings/Z3str2-bv/concat-027/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-028/test.c b/regression/strings/Z3str2-bv/concat-028/test.c deleted file mode 100644 index 9484a512b8a..00000000000 --- a/regression/strings/Z3str2-bv/concat-028/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(m, n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 0) - && (__CPROVER_string_length(y) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 deleted file mode 100644 index a0f282d66f8..00000000000 --- a/regression/strings/Z3str2-bv/concat-028/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 deleted file mode 100644 index 3a866ea35b7..00000000000 --- a/regression/strings/Z3str2-bv/concat-028/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-029/test.c b/regression/strings/Z3str2-bv/concat-029/test.c deleted file mode 100644 index d79f90a58fa..00000000000 --- a/regression/strings/Z3str2-bv/concat-029/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) - && (__CPROVER_string_length(m) == 0) - && (__CPROVER_string_length(n) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 deleted file mode 100644 index f9357c3171a..00000000000 --- a/regression/strings/Z3str2-bv/concat-029/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 deleted file mode 100644 index 94ec803652e..00000000000 --- a/regression/strings/Z3str2-bv/concat-029/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-030/test.c b/regression/strings/Z3str2-bv/concat-030/test.c deleted file mode 100644 index e9f7b4f3513..00000000000 --- a/regression/strings/Z3str2-bv/concat-030/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) - && (__CPROVER_string_length(m) == 1) - && (__CPROVER_string_length(n) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 deleted file mode 100644 index 9dae437e9a2..00000000000 --- a/regression/strings/Z3str2-bv/concat-030/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 deleted file mode 100644 index 787a48321c1..00000000000 --- a/regression/strings/Z3str2-bv/concat-030/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-031/test.c b/regression/strings/Z3str2-bv/concat-031/test.c deleted file mode 100644 index 481c99bfe10..00000000000 --- a/regression/strings/Z3str2-bv/concat-031/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) - && (__CPROVER_string_length(m) == 0) - && (__CPROVER_string_length(n) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 deleted file mode 100644 index 0e5135ae3a9..00000000000 --- a/regression/strings/Z3str2-bv/concat-031/test.c.qarr.smt2 +++ /dev/null @@ -1,237 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 deleted file mode 100644 index 662a1b5701b..00000000000 --- a/regression/strings/Z3str2-bv/concat-031/test.c.str.smt2 +++ /dev/null @@ -1,213 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-032/test.c b/regression/strings/Z3str2-bv/concat-032/test.c deleted file mode 100644 index 9647d70eb17..00000000000 --- a/regression/strings/Z3str2-bv/concat-032/test.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m; - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(m, n)) - && (__CPROVER_string_length(m) == 1) - && (__CPROVER_string_length(n) == 1) - && (__CPROVER_string_length(x) == 1) - && (__CPROVER_string_length(y) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 deleted file mode 100644 index f7854d914dd..00000000000 --- a/regression/strings/Z3str2-bv/concat-032/test.c.qarr.smt2 +++ /dev/null @@ -1,309 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#4| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3| |goto_symex::&92;guard#4|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::m!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::m!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::n!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#4| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B13| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; set_to true -(assert |goto_symex::&92;guard#4|) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|goto_symex::&92;guard#4|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 deleted file mode 100644 index b20de311c0d..00000000000 --- a/regression/strings/Z3str2-bv/concat-032/test.c.str.smt2 +++ /dev/null @@ -1,289 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#4| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3| |goto_symex::&92;guard#4|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::m!0@1#1| |main::1::n!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::m!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::n!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.2 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.2) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.3 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.3|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.3) - -; set_to true -(assert (= |goto_symex::&92;guard#4| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B13| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; set_to true -(assert |goto_symex::&92;guard#4|) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|goto_symex::&92;guard#4|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$4!0@1#2|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-033/test.c b/regression/strings/Z3str2-bv/concat-033/test.c deleted file mode 100644 index d77b1ea3532..00000000000 --- a/regression/strings/Z3str2-bv/concat-033/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 deleted file mode 100644 index 5145d6ac68a..00000000000 --- a/regression/strings/Z3str2-bv/concat-033/test.c.qarr.smt2 +++ /dev/null @@ -1,174 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 deleted file mode 100644 index fb18bf2015d..00000000000 --- a/regression/strings/Z3str2-bv/concat-033/test.c.str.smt2 +++ /dev/null @@ -1,142 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-034/test.c b/regression/strings/Z3str2-bv/concat-034/test.c deleted file mode 100644 index b8527f4fb4b..00000000000 --- a/regression/strings/Z3str2-bv/concat-034/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(x, __CPROVER_string_literal("b")), y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 deleted file mode 100644 index d00ecc61546..00000000000 --- a/regression/strings/Z3str2-bv/concat-034/test.c.qarr.smt2 +++ /dev/null @@ -1,209 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 deleted file mode 100644 index 00659afb1de..00000000000 --- a/regression/strings/Z3str2-bv/concat-034/test.c.str.smt2 +++ /dev/null @@ -1,165 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::1::y!0@1#1|)) - -(define-fun string.2 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-035/test.c b/regression/strings/Z3str2-bv/concat-035/test.c deleted file mode 100644 index b45123c6033..00000000000 --- a/regression/strings/Z3str2-bv/concat-035/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(z) == 0) - && (__CPROVER_string_length(x) == 2)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 deleted file mode 100644 index b327ae334c2..00000000000 --- a/regression/strings/Z3str2-bv/concat-035/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 deleted file mode 100644 index 4657c2e1ad3..00000000000 --- a/regression/strings/Z3str2-bv/concat-035/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-036/test.c b/regression/strings/Z3str2-bv/concat-036/test.c deleted file mode 100644 index 2cfd98f5acb..00000000000 --- a/regression/strings/Z3str2-bv/concat-036/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(z) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 deleted file mode 100644 index 9abe839e247..00000000000 --- a/regression/strings/Z3str2-bv/concat-036/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 deleted file mode 100644 index 368acd2c6f2..00000000000 --- a/regression/strings/Z3str2-bv/concat-036/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-037/test.c b/regression/strings/Z3str2-bv/concat-037/test.c deleted file mode 100644 index 91200bf095a..00000000000 --- a/regression/strings/Z3str2-bv/concat-037/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(x) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 deleted file mode 100644 index 114a02fb274..00000000000 --- a/regression/strings/Z3str2-bv/concat-037/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 deleted file mode 100644 index c999d203e5d..00000000000 --- a/regression/strings/Z3str2-bv/concat-037/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-038/test.c b/regression/strings/Z3str2-bv/concat-038/test.c deleted file mode 100644 index cc5ca9a5b87..00000000000 --- a/regression/strings/Z3str2-bv/concat-038/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(z) == 0) - && (__CPROVER_string_length(x) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 deleted file mode 100644 index 2f2f5d17059..00000000000 --- a/regression/strings/Z3str2-bv/concat-038/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 deleted file mode 100644 index 202900ae2b6..00000000000 --- a/regression/strings/Z3str2-bv/concat-038/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-039/test.c b/regression/strings/Z3str2-bv/concat-039/test.c deleted file mode 100644 index 11662be8152..00000000000 --- a/regression/strings/Z3str2-bv/concat-039/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(z) == 0) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 deleted file mode 100644 index ddc08da0d32..00000000000 --- a/regression/strings/Z3str2-bv/concat-039/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 deleted file mode 100644 index ba05301add2..00000000000 --- a/regression/strings/Z3str2-bv/concat-039/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-040/test.c b/regression/strings/Z3str2-bv/concat-040/test.c deleted file mode 100644 index 7eff1f51ca4..00000000000 --- a/regression/strings/Z3str2-bv/concat-040/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(z) == 1) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 deleted file mode 100644 index 8d7502942a8..00000000000 --- a/regression/strings/Z3str2-bv/concat-040/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 deleted file mode 100644 index e3009fcc0e7..00000000000 --- a/regression/strings/Z3str2-bv/concat-040/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-041/test.c b/regression/strings/Z3str2-bv/concat-041/test.c deleted file mode 100644 index f1aee262fca..00000000000 --- a/regression/strings/Z3str2-bv/concat-041/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(z, __CPROVER_string_literal("abc"))) - && (__CPROVER_string_length(y) == 1) - && (__CPROVER_string_length(x) == 3)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 deleted file mode 100644 index bf8e9fafe19..00000000000 --- a/regression/strings/Z3str2-bv/concat-041/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 deleted file mode 100644 index ad148adb0e4..00000000000 --- a/regression/strings/Z3str2-bv/concat-041/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-042/test.c b/regression/strings/Z3str2-bv/concat-042/test.c deleted file mode 100644 index b3584747a24..00000000000 --- a/regression/strings/Z3str2-bv/concat-042/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string v1; - __CPROVER_string v2; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_concat(v1, v2), __CPROVER_string_literal("e")), __CPROVER_string_concat(x, y))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 deleted file mode 100644 index d82032c6eab..00000000000 --- a/regression/strings/Z3str2-bv/concat-042/test.c.qarr.smt2 +++ /dev/null @@ -1,200 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::v1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::v2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::v1!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::v2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.2) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::v1!0@1#1| |main::1::v1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::v2!0@1#1| |main::1::v2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::v1!0@1#1|)) -(get-value (|main::1::v2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 deleted file mode 100644 index e93ca493591..00000000000 --- a/regression/strings/Z3str2-bv/concat-042/test.c.str.smt2 +++ /dev/null @@ -1,160 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::v1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::v2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::v1!0@1#1| |main::1::v2!0@1#1|)) - -(define-fun string.1 () cprover.String "e") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::v1!0@1#1| |main::1::v1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::v2!0@1#1| |main::1::v2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::v1!0@1#1|)) -(get-value (|main::1::v2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-043/test.c b/regression/strings/Z3str2-bv/concat-043/test.c deleted file mode 100644 index ec2e4c157f5..00000000000 --- a/regression/strings/Z3str2-bv/concat-043/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 deleted file mode 100644 index 00a210d64ab..00000000000 --- a/regression/strings/Z3str2-bv/concat-043/test.c.qarr.smt2 +++ /dev/null @@ -1,174 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.4)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 deleted file mode 100644 index a415ea39ff4..00000000000 --- a/regression/strings/Z3str2-bv/concat-043/test.c.str.smt2 +++ /dev/null @@ -1,142 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B8| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-044/test.c b/regression/strings/Z3str2-bv/concat-044/test.c deleted file mode 100644 index 0813b914a72..00000000000 --- a/regression/strings/Z3str2-bv/concat-044/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) - && (__CPROVER_string_length(x) == 6)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 deleted file mode 100644 index 277f7effae7..00000000000 --- a/regression/strings/Z3str2-bv/concat-044/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 deleted file mode 100644 index c57203699c2..00000000000 --- a/regression/strings/Z3str2-bv/concat-044/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-045/test.c b/regression/strings/Z3str2-bv/concat-045/test.c deleted file mode 100644 index 3eed40b5c67..00000000000 --- a/regression/strings/Z3str2-bv/concat-045/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y2; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)), __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2)) - && (__CPROVER_string_length(x1) == 4)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 deleted file mode 100644 index 0e286e13838..00000000000 --- a/regression/strings/Z3str2-bv/concat-045/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.6)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 deleted file mode 100644 index 4f3f5d1248c..00000000000 --- a/regression/strings/Z3str2-bv/concat-045/test.c.str.smt2 +++ /dev/null @@ -1,203 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -(define-fun string.2 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x2!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-046/test.c b/regression/strings/Z3str2-bv/concat-046/test.c deleted file mode 100644 index a4390b6cb11..00000000000 --- a/regression/strings/Z3str2-bv/concat-046/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) - && (__CPROVER_string_length(x) == 2) - && (__CPROVER_string_length(z) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 deleted file mode 100644 index 584b31729f5..00000000000 --- a/regression/strings/Z3str2-bv/concat-046/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 deleted file mode 100644 index 26610885257..00000000000 --- a/regression/strings/Z3str2-bv/concat-046/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c b/regression/strings/Z3str2-bv/concat-047-unsat/test.c deleted file mode 100644 index 610f0dbc59a..00000000000 --- a/regression/strings/Z3str2-bv/concat-047-unsat/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) - && (__CPROVER_string_length(x) == 2) - && (__CPROVER_string_length(y) == 4) - && (__CPROVER_string_length(z) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 deleted file mode 100644 index c31ebade389..00000000000 --- a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,282 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 deleted file mode 100644 index 6c1f32f1071..00000000000 --- a/regression/strings/Z3str2-bv/concat-047-unsat/test.c.str.smt2 +++ /dev/null @@ -1,256 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -(declare-fun string_length.2 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.2) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-048/test.c b/regression/strings/Z3str2-bv/concat-048/test.c deleted file mode 100644 index 25eaacb7c74..00000000000 --- a/regression/strings/Z3str2-bv/concat-048/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) - && (__CPROVER_string_length(x) == 3) - && (__CPROVER_string_length(z) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 deleted file mode 100644 index 9cde138fc57..00000000000 --- a/regression/strings/Z3str2-bv/concat-048/test.c.qarr.smt2 +++ /dev/null @@ -1,246 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 deleted file mode 100644 index 6b753a62647..00000000000 --- a/regression/strings/Z3str2-bv/concat-048/test.c.str.smt2 +++ /dev/null @@ -1,218 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B18| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-049/test.c b/regression/strings/Z3str2-bv/concat-049/test.c deleted file mode 100644 index 1240be390cb..00000000000 --- a/regression/strings/Z3str2-bv/concat-049/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, y), __CPROVER_string_concat(__CPROVER_string_literal("abc"), z)) - && (__CPROVER_string_length(x) == 1) - && (__CPROVER_string_length(y) == 3) - && (__CPROVER_string_length(z) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 deleted file mode 100644 index 49ce17544e0..00000000000 --- a/regression/strings/Z3str2-bv/concat-049/test.c.qarr.smt2 +++ /dev/null @@ -1,282 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::z!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 deleted file mode 100644 index e92b921ad64..00000000000 --- a/regression/strings/Z3str2-bv/concat-049/test.c.str.smt2 +++ /dev/null @@ -1,256 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#3| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2| |goto_symex::&92;guard#3|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::z!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -(declare-fun string_length.2 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.2|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.2) - -; set_to true -(assert (= |goto_symex::&92;guard#3| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; set_to true -(assert |goto_symex::&92;guard#3|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B22| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|goto_symex::&92;guard#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-050/test.c b/regression/strings/Z3str2-bv/concat-050/test.c deleted file mode 100644 index 091e5b736e5..00000000000 --- a/regression/strings/Z3str2-bv/concat-050/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abcefg"), y))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 deleted file mode 100644 index 632c2539de3..00000000000 --- a/regression/strings/Z3str2-bv/concat-050/test.c.qarr.smt2 +++ /dev/null @@ -1,193 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv103 8))) -(assert (= (cprover.str.len string.3) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 deleted file mode 100644 index 3b768a6e314..00000000000 --- a/regression/strings/Z3str2-bv/concat-050/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "abcefg") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-051/test.c b/regression/strings/Z3str2-bv/concat-051/test.c deleted file mode 100644 index 4d0eb1b5aca..00000000000 --- a/regression/strings/Z3str2-bv/concat-051/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abcefg"), y)) - && (__CPROVER_string_length(y) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 deleted file mode 100644 index debac6a1548..00000000000 --- a/regression/strings/Z3str2-bv/concat-051/test.c.qarr.smt2 +++ /dev/null @@ -1,229 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv103 8))) -(assert (= (cprover.str.len string.3) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 deleted file mode 100644 index ccba0deb9e4..00000000000 --- a/regression/strings/Z3str2-bv/concat-051/test.c.str.smt2 +++ /dev/null @@ -1,192 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "abcefg") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-052/test.c b/regression/strings/Z3str2-bv/concat-052/test.c deleted file mode 100644 index 435371d8570..00000000000 --- a/regression/strings/Z3str2-bv/concat-052/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y)) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 deleted file mode 100644 index dc07d8c85ab..00000000000 --- a/regression/strings/Z3str2-bv/concat-052/test.c.qarr.smt2 +++ /dev/null @@ -1,221 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 deleted file mode 100644 index dc05bd01015..00000000000 --- a/regression/strings/Z3str2-bv/concat-052/test.c.str.smt2 +++ /dev/null @@ -1,191 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-053/test.c b/regression/strings/Z3str2-bv/concat-053/test.c deleted file mode 100644 index 7b6281872ca..00000000000 --- a/regression/strings/Z3str2-bv/concat-053/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abcefgh"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y)) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 deleted file mode 100644 index cb3e36ca555..00000000000 --- a/regression/strings/Z3str2-bv/concat-053/test.c.qarr.smt2 +++ /dev/null @@ -1,230 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv104 8))) -(assert (= (cprover.str.len string.1) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 deleted file mode 100644 index cc8a3c13969..00000000000 --- a/regression/strings/Z3str2-bv/concat-053/test.c.str.smt2 +++ /dev/null @@ -1,192 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abcefgh") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c b/regression/strings/Z3str2-bv/concat-054-unsat/test.c deleted file mode 100644 index 8e25e2c9ac8..00000000000 --- a/regression/strings/Z3str2-bv/concat-054-unsat/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abkefgh"), x), __CPROVER_string_concat(__CPROVER_string_literal("abc"), y))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 deleted file mode 100644 index 4735ec5fffe..00000000000 --- a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,194 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv107 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv104 8))) -(assert (= (cprover.str.len string.1) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 deleted file mode 100644 index 743598dd4bc..00000000000 --- a/regression/strings/Z3str2-bv/concat-054-unsat/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abkefgh") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-055/test.c b/regression/strings/Z3str2-bv/concat-055/test.c deleted file mode 100644 index 1f763acfbff..00000000000 --- a/regression/strings/Z3str2-bv/concat-055/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 deleted file mode 100644 index 8b2642c02e1..00000000000 --- a/regression/strings/Z3str2-bv/concat-055/test.c.qarr.smt2 +++ /dev/null @@ -1,197 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.3) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 deleted file mode 100644 index c904ea5dcdb..00000000000 --- a/regression/strings/Z3str2-bv/concat-055/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abefef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "efefghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-056/test.c b/regression/strings/Z3str2-bv/concat-056/test.c deleted file mode 100644 index 670572f9747..00000000000 --- a/regression/strings/Z3str2-bv/concat-056/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi"))) - && (__CPROVER_string_length(y) == 4)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 deleted file mode 100644 index 9933d1fdd6a..00000000000 --- a/regression/strings/Z3str2-bv/concat-056/test.c.qarr.smt2 +++ /dev/null @@ -1,233 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.3) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 deleted file mode 100644 index 312d3a5e5df..00000000000 --- a/regression/strings/Z3str2-bv/concat-056/test.c.str.smt2 +++ /dev/null @@ -1,192 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abefef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "efefghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-057/test.c b/regression/strings/Z3str2-bv/concat-057/test.c deleted file mode 100644 index 5da9d7e82dc..00000000000 --- a/regression/strings/Z3str2-bv/concat-057/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abefef"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("efefghi"))) - && (__CPROVER_string_length(y) == 2)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 deleted file mode 100644 index 2fe2bfcb0f6..00000000000 --- a/regression/strings/Z3str2-bv/concat-057/test.c.qarr.smt2 +++ /dev/null @@ -1,233 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv6 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv102 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv103 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.3) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 deleted file mode 100644 index 10458766c56..00000000000 --- a/regression/strings/Z3str2-bv/concat-057/test.c.str.smt2 +++ /dev/null @@ -1,192 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abefef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "efefghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-058/test.c b/regression/strings/Z3str2-bv/concat-058/test.c deleted file mode 100644 index 81f9df3cb2b..00000000000 --- a/regression/strings/Z3str2-bv/concat-058/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("ab"), x), __CPROVER_string_concat(y, __CPROVER_string_literal("k_ghi")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 deleted file mode 100644 index 7ffff75313f..00000000000 --- a/regression/strings/Z3str2-bv/concat-058/test.c.qarr.smt2 +++ /dev/null @@ -1,191 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv107 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv103 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.3) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 deleted file mode 100644 index 6963c09281c..00000000000 --- a/regression/strings/Z3str2-bv/concat-058/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x!0@1#1|)) - -(define-fun string.2 () cprover.String "k_ghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c b/regression/strings/Z3str2-bv/concat-059-unsat/test.c deleted file mode 100644 index d27ba3c7db6..00000000000 --- a/regression/strings/Z3str2-bv/concat-059-unsat/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("ab")), __CPROVER_string_concat(y, __CPROVER_string_literal("k_ghi")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 deleted file mode 100644 index ec90fb96c6e..00000000000 --- a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,191 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv107 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv103 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv104 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.3) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 deleted file mode 100644 index 2d79959a3e6..00000000000 --- a/regression/strings/Z3str2-bv/concat-059-unsat/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "k_ghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-060/test.c b/regression/strings/Z3str2-bv/concat-060/test.c deleted file mode 100644 index e473967cca5..00000000000 --- a/regression/strings/Z3str2-bv/concat-060/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("ab")), __CPROVER_string_concat(y, __CPROVER_string_literal("iab")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 deleted file mode 100644 index 855f7005a74..00000000000 --- a/regression/strings/Z3str2-bv/concat-060/test.c.qarr.smt2 +++ /dev/null @@ -1,189 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv105 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.3) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 deleted file mode 100644 index f147f851b3a..00000000000 --- a/regression/strings/Z3str2-bv/concat-060/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "iab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-061/test.c b/regression/strings/Z3str2-bv/concat-061/test.c deleted file mode 100644 index 75fd520aedd..00000000000 --- a/regression/strings/Z3str2-bv/concat-061/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("k_ghiab")), __CPROVER_string_concat(y, __CPROVER_string_literal("ab")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 deleted file mode 100644 index b44af6b5c1f..00000000000 --- a/regression/strings/Z3str2-bv/concat-061/test.c.qarr.smt2 +++ /dev/null @@ -1,193 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv107 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv95 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv105 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv7 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.3) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 deleted file mode 100644 index 1b54cb79509..00000000000 --- a/regression/strings/Z3str2-bv/concat-061/test.c.str.smt2 +++ /dev/null @@ -1,154 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "k_ghiab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B9| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-062/test.c b/regression/strings/Z3str2-bv/concat-062/test.c deleted file mode 100644 index bfa46e11e5e..00000000000 --- a/regression/strings/Z3str2-bv/concat-062/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, Y), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 deleted file mode 100644 index f260a6e1ddc..00000000000 --- a/regression/strings/Z3str2-bv/concat-062/test.c.qarr.smt2 +++ /dev/null @@ -1,200 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::Y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 deleted file mode 100644 index 7d169aac28c..00000000000 --- a/regression/strings/Z3str2-bv/concat-062/test.c.str.smt2 +++ /dev/null @@ -1,160 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) - -(define-fun string.1 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-063/test.c b/regression/strings/Z3str2-bv/concat-063/test.c deleted file mode 100644 index c93b712520e..00000000000 --- a/regression/strings/Z3str2-bv/concat-063/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, Y), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) - && ((int)__CPROVER_string_length(X)) > ((int)0) - && ((int)__CPROVER_string_length(Y)) > ((int)1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 deleted file mode 100644 index 29c01dec9c2..00000000000 --- a/regression/strings/Z3str2-bv/concat-063/test.c.qarr.smt2 +++ /dev/null @@ -1,272 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::Y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.2) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::Y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B19| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B20| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 deleted file mode 100644 index 7cf381e83db..00000000000 --- a/regression/strings/Z3str2-bv/concat-063/test.c.str.smt2 +++ /dev/null @@ -1,236 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) - -(define-fun string.1 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::Y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B18| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B19| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B20| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-064/test.c b/regression/strings/Z3str2-bv/concat-064/test.c deleted file mode 100644 index f22a0ac4008..00000000000 --- a/regression/strings/Z3str2-bv/concat-064/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b"))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 deleted file mode 100644 index b6694d014ba..00000000000 --- a/regression/strings/Z3str2-bv/concat-064/test.c.qarr.smt2 +++ /dev/null @@ -1,235 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::Y!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 deleted file mode 100644 index 4ade173ed76..00000000000 --- a/regression/strings/Z3str2-bv/concat-064/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-065/test.c b/regression/strings/Z3str2-bv/concat-065/test.c deleted file mode 100644 index df470bffaa9..00000000000 --- a/regression/strings/Z3str2-bv/concat-065/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b"))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) - && (__CPROVER_string_length(X) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 deleted file mode 100644 index 0bf15d98f72..00000000000 --- a/regression/strings/Z3str2-bv/concat-065/test.c.qarr.smt2 +++ /dev/null @@ -1,271 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::Y!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.7)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 deleted file mode 100644 index 812fbe6da2d..00000000000 --- a/regression/strings/Z3str2-bv/concat-065/test.c.str.smt2 +++ /dev/null @@ -1,221 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-066/test.c b/regression/strings/Z3str2-bv/concat-066/test.c deleted file mode 100644 index 18836a75b5d..00000000000 --- a/regression/strings/Z3str2-bv/concat-066/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("a"), __CPROVER_string_concat(X, Y)), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 deleted file mode 100644 index f418493ae4e..00000000000 --- a/regression/strings/Z3str2-bv/concat-066/test.c.qarr.smt2 +++ /dev/null @@ -1,235 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 deleted file mode 100644 index 21c3e645f6a..00000000000 --- a/regression/strings/Z3str2-bv/concat-066/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::1::Y!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c b/regression/strings/Z3str2-bv/concat-067-unsat/test.c deleted file mode 100644 index a18cfc4df64..00000000000 --- a/regression/strings/Z3str2-bv/concat-067-unsat/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_literal("a")), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J))) - && (__CPROVER_string_length(X) == 0)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 deleted file mode 100644 index e985fe90b78..00000000000 --- a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,250 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.3) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.4) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.6)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B16| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 deleted file mode 100644 index cd468420ad3..00000000000 --- a/regression/strings/Z3str2-bv/concat-067-unsat/test.c.str.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B15| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B16| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv0 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-068/test.c b/regression/strings/Z3str2-bv/concat-068/test.c deleted file mode 100644 index 9c51d4e84e3..00000000000 --- a/regression/strings/Z3str2-bv/concat-068/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("a"), x)) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y, __CPROVER_string_literal("c"))) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 deleted file mode 100644 index 0f8fd3c208d..00000000000 --- a/regression/strings/Z3str2-bv/concat-068/test.c.qarr.smt2 +++ /dev/null @@ -1,280 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.6)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B11| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 deleted file mode 100644 index 6e3a8c6ac9a..00000000000 --- a/regression/strings/Z3str2-bv/concat-068/test.c.str.smt2 +++ /dev/null @@ -1,240 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B11| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B23| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-069/test.c b/regression/strings/Z3str2-bv/concat-069/test.c deleted file mode 100644 index 8d79eb5b6b1..00000000000 --- a/regression/strings/Z3str2-bv/concat-069/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(__CPROVER_string_literal("a"), Y)), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 deleted file mode 100644 index c214a30afc0..00000000000 --- a/regression/strings/Z3str2-bv/concat-069/test.c.qarr.smt2 +++ /dev/null @@ -1,235 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 deleted file mode 100644 index 49107ede998..00000000000 --- a/regression/strings/Z3str2-bv/concat-069/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -(define-fun string.2 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-070/test.c b/regression/strings/Z3str2-bv/concat-070/test.c deleted file mode 100644 index c641be260c0..00000000000 --- a/regression/strings/Z3str2-bv/concat-070/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string I; - __CPROVER_string J; - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("a"), __CPROVER_string_concat(X, __CPROVER_string_concat(Y, __CPROVER_string_literal("b")))), __CPROVER_string_concat(I, __CPROVER_string_concat(__CPROVER_string_literal("c"), J)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 deleted file mode 100644 index 3a2a91a7c53..00000000000 --- a/regression/strings/Z3str2-bv/concat-070/test.c.qarr.smt2 +++ /dev/null @@ -1,270 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.2) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::Y!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -(declare-fun string.6 () cprover.String) -(assert (= (select string.6 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.6) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.6) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.7 () cprover.String |main::1::J!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.8 () cprover.String) -(define-fun string_concat.s0.8 () cprover.String |main::1::I!0@1#1|) -(define-fun string_concat.s1.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) -(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.8) - -; string equal -(declare-fun string_equal.9 () Bool) -(define-fun string_equal.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.9 () cprover.Pos) -(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) -(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) -(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.9)) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 deleted file mode 100644 index a175404fda6..00000000000 --- a/regression/strings/Z3str2-bv/concat-070/test.c.str.smt2 +++ /dev/null @@ -1,206 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -(define-fun string.2 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) - -(define-fun string.3 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::J!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::J!0@1#1|)) - -; find_symbols -(declare-fun |main::1::I!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::I!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::I!0@1#1| |main::1::I!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::J!0@1#1| |main::1::J!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::I!0@1#1|)) -(get-value (|main::1::J!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-071/test.c b/regression/strings/Z3str2-bv/concat-071/test.c deleted file mode 100644 index 715e4ee4a08..00000000000 --- a/regression/strings/Z3str2-bv/concat-071/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2)), __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 deleted file mode 100644 index eb77b0e4157..00000000000 --- a/regression/strings/Z3str2-bv/concat-071/test.c.qarr.smt2 +++ /dev/null @@ -1,238 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.4) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) - -; convert -(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 deleted file mode 100644 index 4c613db4496..00000000000 --- a/regression/strings/Z3str2-bv/concat-071/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B4| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-072/test.c b/regression/strings/Z3str2-bv/concat-072/test.c deleted file mode 100644 index 41a7eee798d..00000000000 --- a/regression/strings/Z3str2-bv/concat-072/test.c +++ /dev/null @@ -1,19 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 deleted file mode 100644 index 6592d1cf5d2..00000000000 --- a/regression/strings/Z3str2-bv/concat-072/test.c.qarr.smt2 +++ /dev/null @@ -1,325 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.8)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 deleted file mode 100644 index 0cb3c221a51..00000000000 --- a/regression/strings/Z3str2-bv/concat-072/test.c.str.smt2 +++ /dev/null @@ -1,260 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B25| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-073/test.c b/regression/strings/Z3str2-bv/concat-073/test.c deleted file mode 100644 index 487f42198ff..00000000000 --- a/regression/strings/Z3str2-bv/concat-073/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string M; - __CPROVER_string X; - __CPROVER_string Y1; - __CPROVER_string Y2; - __CPROVER_string Z; - - if (__CPROVER_string_equal(Z, __CPROVER_string_concat(X, __CPROVER_string_literal("gkhi"))) - && __CPROVER_string_equal(Z, __CPROVER_string_concat(Y1, Y2)) - && __CPROVER_string_equal(Z, __CPROVER_string_concat(__CPROVER_string_literal("abcd"), M))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 deleted file mode 100644 index ce3ad855e0c..00000000000 --- a/regression/strings/Z3str2-bv/concat-073/test.c.qarr.smt2 +++ /dev/null @@ -1,335 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv107 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::Z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::Z!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) - -; find_symbols -(declare-fun |main::1::Y1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::Y1!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::Y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::Z!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -(declare-fun string.6 () cprover.String) -(assert (= (select string.6 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.6 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.6 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.6 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.6) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.6) - -; find_symbols -(declare-fun |main::1::M!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.7 () cprover.String |main::1::M!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::Z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.8)) - -; convert -(define-fun |B13| () Bool (= |main::1::M!0@1#1| |main::1::M!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::Z!0@1#1| |main::1::Z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::M!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y1!0@1#1|)) -(get-value (|main::1::Y2!0@1#1|)) -(get-value (|main::1::Z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 deleted file mode 100644 index d67ca626c22..00000000000 --- a/regression/strings/Z3str2-bv/concat-073/test.c.str.smt2 +++ /dev/null @@ -1,267 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "gkhi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) - -; find_symbols -(declare-fun |main::1::Z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -; find_symbols -(declare-fun |main::1::Y1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::Y1!0@1#1| |main::1::Y2!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(define-fun string.2 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::M!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::M!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::Z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) - -; convert -(define-fun |B13| () Bool (= |main::1::M!0@1#1| |main::1::M!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::Z!0@1#1| |main::1::Z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::M!0@1#1|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y1!0@1#1|)) -(get-value (|main::1::Y2!0@1#1|)) -(get-value (|main::1::Z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-074/test.c b/regression/strings/Z3str2-bv/concat-074/test.c deleted file mode 100644 index 5899762af72..00000000000 --- a/regression/strings/Z3str2-bv/concat-074/test.c +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string k; - __CPROVER_string m; - __CPROVER_string n1; - __CPROVER_string n2; - __CPROVER_string x; - __CPROVER_string y; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x, __CPROVER_string_literal("gkhi"))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y, __CPROVER_string_literal("hi"))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("abcd"), m)) - && __CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("ab"), k)) - && __CPROVER_string_equal(z, __CPROVER_string_concat(n1, n2))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 deleted file mode 100644 index 3f7928dfec4..00000000000 --- a/regression/strings/Z3str2-bv/concat-074/test.c.qarr.smt2 +++ /dev/null @@ -1,537 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv107 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv104 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv104 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.4) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| string_equal.6)) - -(declare-fun string.7 () cprover.String) -(assert (= (select string.7 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.7 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.7 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.7 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.7) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.7) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.8 () cprover.String) -(define-fun string_concat.s0.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.8 () cprover.String |main::1::m!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) -(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.8) - -; string equal -(declare-fun string_equal.9 () Bool) -(define-fun string_equal.s1.9 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.9 () cprover.Pos) -(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) -(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) -(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.9)) - -(declare-fun string.10 () cprover.String) -(assert (= (select string.10 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.10 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.10) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.10) - -; find_symbols -(declare-fun |main::1::k!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.11 () cprover.String |main::1::k!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.13 () cprover.String) -(define-fun string_concat.s0.13 () cprover.String |main::1::n1!0@1#1|) -(define-fun string_concat.s1.13 () cprover.String |main::1::n2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.13)) (= (select string_concat.s0.13 ?n) (select string_concat.13 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.13)) (= (select string_concat.s1.13 ?n) (select string_concat.13 (bvadd (cprover.str.len string_concat.s0.13) ?n)))))) -(assert (= (cprover.str.len string_concat.13) (bvadd (cprover.str.len string_concat.s0.13) (cprover.str.len string_concat.s1.13)))) -(assert (bvuge (cprover.str.len string_concat.13) (cprover.str.len string_concat.s0.13))) -(assert (bvuge (cprover.str.len string_concat.13) (cprover.str.len string_concat.s1.13))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.13) - -; string equal -(declare-fun string_equal.14 () Bool) -(define-fun string_equal.s1.14 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(declare-fun string_equal.idx.14 () cprover.Pos) -(assert (=> string_equal.14 (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.14 (bvult ?n (cprover.str.len string_equal.s1.14))) (= (select string_equal.s1.14 ?n) (select string_equal.s2.14 ?n))))) -(assert (=> (not string_equal.14) (or (not (= (cprover.str.len string_equal.s1.14) (cprover.str.len string_equal.s2.14))) -(and (bvult string_equal.idx.14 (cprover.str.len string_equal.s1.14)) (not (= (select string_equal.s1.14 string_equal.idx.14) (select string_equal.s2.14 string_equal.idx.14))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.14)) - -; convert -(define-fun |B27| () Bool (= |main::1::k!0@1#1| |main::1::k!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B32| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B33| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| () Bool) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B48| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) - -; convert -(define-fun |B49| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B50| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B51| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B52| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::k!0@1#1|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 deleted file mode 100644 index 483cc701862..00000000000 --- a/regression/strings/Z3str2-bv/concat-074/test.c.str.smt2 +++ /dev/null @@ -1,423 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "gkhi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|))) - -(define-fun string.2 () cprover.String "hi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|))) - -(define-fun string.3 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::m!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(define-fun string.4 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::k!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::k!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::n1!0@1#1| |main::1::n2!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|))) - -; convert -(define-fun |B27| () Bool (= |main::1::k!0@1#1| |main::1::k!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::m!0@1#1| |main::1::m!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B32| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; convert -(define-fun |B33| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| () Bool) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B48| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) - -; convert -(define-fun |B49| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) - -; convert -(define-fun |B50| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B51| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B52| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::k!0@1#1|)) -(get-value (|main::1::m!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-075/test.c b/regression/strings/Z3str2-bv/concat-075/test.c deleted file mode 100644 index ffb6c37577f..00000000000 --- a/regression/strings/Z3str2-bv/concat-075/test.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string x3; - __CPROVER_string y2; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("ef"), y2), __CPROVER_string_concat(x1, x2)) - && __CPROVER_string_equal(__CPROVER_string_concat(x3, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)), __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 deleted file mode 100644 index c2726d95996..00000000000 --- a/regression/strings/Z3str2-bv/concat-075/test.c.qarr.smt2 +++ /dev/null @@ -1,358 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B9| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B10| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B11| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B12| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::x3!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::x3!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.7) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; string concatenation -(declare-fun string_concat.8 () cprover.String) -(define-fun string_concat.s0.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.8 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.8)) (= (select string_concat.s0.8 ?n) (select string_concat.8 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.8)) (= (select string_concat.s1.8 ?n) (select string_concat.8 (bvadd (cprover.str.len string_concat.s0.8) ?n)))))) -(assert (= (cprover.str.len string_concat.8) (bvadd (cprover.str.len string_concat.s0.8) (cprover.str.len string_concat.s1.8)))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s0.8))) -(assert (bvuge (cprover.str.len string_concat.8) (cprover.str.len string_concat.s1.8))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.8) - -; string equal -(declare-fun string_equal.9 () Bool) -(define-fun string_equal.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.9 () cprover.Pos) -(assert (=> string_equal.9 (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.9 (bvult ?n (cprover.str.len string_equal.s1.9))) (= (select string_equal.s1.9 ?n) (select string_equal.s2.9 ?n))))) -(assert (=> (not string_equal.9) (or (not (= (cprover.str.len string_equal.s1.9) (cprover.str.len string_equal.s2.9))) -(and (bvult string_equal.idx.9 (cprover.str.len string_equal.s1.9)) (not (= (select string_equal.s1.9 string_equal.idx.9) (select string_equal.s2.9 string_equal.idx.9))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.9)) - -; convert -(define-fun |B14| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) - -; convert -(define-fun |B18| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B30| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x3!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 deleted file mode 100644 index db7460483a3..00000000000 --- a/regression/strings/Z3str2-bv/concat-075/test.c.str.smt2 +++ /dev/null @@ -1,284 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B9| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B10| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B11| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B12| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::1::x2!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|))) - -(define-fun string.2 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x3!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::x3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::y2!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; convert -(define-fun |B14| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) - -; convert -(define-fun |B18| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B30| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x3!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c b/regression/strings/Z3str2-bv/concat-076-unsat/test.c deleted file mode 100644 index b88cf3ec2ea..00000000000 --- a/regression/strings/Z3str2-bv/concat-076-unsat/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 4)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 deleted file mode 100644 index 0787bb5efed..00000000000 --- a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 deleted file mode 100644 index 4746f5b149e..00000000000 --- a/regression/strings/Z3str2-bv/concat-076-unsat/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-077/test.c b/regression/strings/Z3str2-bv/concat-077/test.c deleted file mode 100644 index 288c6dec4af..00000000000 --- a/regression/strings/Z3str2-bv/concat-077/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 5)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 deleted file mode 100644 index 41d5454ab53..00000000000 --- a/regression/strings/Z3str2-bv/concat-077/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 deleted file mode 100644 index 9767c660775..00000000000 --- a/regression/strings/Z3str2-bv/concat-077/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-078/test.c b/regression/strings/Z3str2-bv/concat-078/test.c deleted file mode 100644 index 29195bd90c3..00000000000 --- a/regression/strings/Z3str2-bv/concat-078/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 6)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 deleted file mode 100644 index a17a9867ea2..00000000000 --- a/regression/strings/Z3str2-bv/concat-078/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 deleted file mode 100644 index fe0336210c2..00000000000 --- a/regression/strings/Z3str2-bv/concat-078/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-079/test.c b/regression/strings/Z3str2-bv/concat-079/test.c deleted file mode 100644 index a1a50de2b61..00000000000 --- a/regression/strings/Z3str2-bv/concat-079/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 7)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 deleted file mode 100644 index 75f67b19bae..00000000000 --- a/regression/strings/Z3str2-bv/concat-079/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 deleted file mode 100644 index e510339c500..00000000000 --- a/regression/strings/Z3str2-bv/concat-079/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv7 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-080/test.c b/regression/strings/Z3str2-bv/concat-080/test.c deleted file mode 100644 index 0977e1cc61f..00000000000 --- a/regression/strings/Z3str2-bv/concat-080/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 8)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 deleted file mode 100644 index 901efa3c41f..00000000000 --- a/regression/strings/Z3str2-bv/concat-080/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 deleted file mode 100644 index f04b52c7a7e..00000000000 --- a/regression/strings/Z3str2-bv/concat-080/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-081/test.c b/regression/strings/Z3str2-bv/concat-081/test.c deleted file mode 100644 index cedd9cf993a..00000000000 --- a/regression/strings/Z3str2-bv/concat-081/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 9)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 deleted file mode 100644 index e163be48938..00000000000 --- a/regression/strings/Z3str2-bv/concat-081/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 deleted file mode 100644 index a78a677863c..00000000000 --- a/regression/strings/Z3str2-bv/concat-081/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-082/test.c b/regression/strings/Z3str2-bv/concat-082/test.c deleted file mode 100644 index 6a3a32dcd08..00000000000 --- a/regression/strings/Z3str2-bv/concat-082/test.c +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && (__CPROVER_string_length(z) == 16)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 deleted file mode 100644 index 55290515457..00000000000 --- a/regression/strings/Z3str2-bv/concat-082/test.c.qarr.smt2 +++ /dev/null @@ -1,484 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 deleted file mode 100644 index c802cb01c0f..00000000000 --- a/regression/strings/Z3str2-bv/concat-082/test.c.str.smt2 +++ /dev/null @@ -1,388 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B42| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B43| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv16 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-083/test.c b/regression/strings/Z3str2-bv/concat-083/test.c deleted file mode 100644 index 692f58d72c5..00000000000 --- a/regression/strings/Z3str2-bv/concat-083/test.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string n1; - __CPROVER_string n2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && ((int)__CPROVER_string_length(z)) < ((int)9)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 deleted file mode 100644 index 122bf078726..00000000000 --- a/regression/strings/Z3str2-bv/concat-083/test.c.qarr.smt2 +++ /dev/null @@ -1,498 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B47| () Bool (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 deleted file mode 100644 index 31ee23a9222..00000000000 --- a/regression/strings/Z3str2-bv/concat-083/test.c.str.smt2 +++ /dev/null @@ -1,402 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B28| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B44| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B47| () Bool (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv9 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-084/test.c b/regression/strings/Z3str2-bv/concat-084/test.c deleted file mode 100644 index aac2785682b..00000000000 --- a/regression/strings/Z3str2-bv/concat-084/test.c +++ /dev/null @@ -1,24 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string n1; - __CPROVER_string n2; - __CPROVER_string x1; - __CPROVER_string x2; - unsigned int x2Len; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && ((int)__CPROVER_string_length(z)) > ((int)7)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 deleted file mode 100644 index 3edaa486535..00000000000 --- a/regression/strings/Z3str2-bv/concat-084/test.c.qarr.smt2 +++ /dev/null @@ -1,505 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.12)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::z!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x2Len!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B28| () Bool (= |main::1::x2Len!0@1#1| |main::1::x2Len!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B47| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B48| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x2Len!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 deleted file mode 100644 index e6202a61498..00000000000 --- a/regression/strings/Z3str2-bv/concat-084/test.c.str.smt2 +++ /dev/null @@ -1,409 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::z!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -; convert -(define-fun |B22| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; convert -(define-fun |B24| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B26| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B27| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x2Len!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B28| () Bool (= |main::1::x2Len!0@1#1| |main::1::x2Len!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| () Bool) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| () Bool) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B45| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) - -; convert -(define-fun |B46| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) - -; convert -(define-fun |B47| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B48| () Bool (not (bvsge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv8 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x2Len!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-085/test.c b/regression/strings/Z3str2-bv/concat-085/test.c deleted file mode 100644 index 07db0ca70cd..00000000000 --- a/regression/strings/Z3str2-bv/concat-085/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m2; - __CPROVER_string t_str2; - __CPROVER_string t_str5; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2)) - && __CPROVER_string_equal(z, __CPROVER_string_concat(t_str5, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(t_str2, __CPROVER_string_literal("abc@")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 deleted file mode 100644 index f76cb03fb41..00000000000 --- a/regression/strings/Z3str2-bv/concat-085/test.c.qarr.smt2 +++ /dev/null @@ -1,385 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.4) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::t_str5!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::t_str5!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.7)) - -(declare-fun string.8 () cprover.String) -(assert (= (select string.8 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.8 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.8 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.8 (_ bv3 32)) (_ bv64 8))) -(assert (= (cprover.str.len string.8) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.8) - -; find_symbols -(declare-fun |main::1::t_str2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.9 () cprover.String) -(define-fun string_concat.s0.9 () cprover.String |main::1::t_str2!0@1#1|) -(define-fun string_concat.s1.9 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.9)) (= (select string_concat.s0.9 ?n) (select string_concat.9 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.9)) (= (select string_concat.s1.9 ?n) (select string_concat.9 (bvadd (cprover.str.len string_concat.s0.9) ?n)))))) -(assert (= (cprover.str.len string_concat.9) (bvadd (cprover.str.len string_concat.s0.9) (cprover.str.len string_concat.s1.9)))) -(assert (bvuge (cprover.str.len string_concat.9) (cprover.str.len string_concat.s0.9))) -(assert (bvuge (cprover.str.len string_concat.9) (cprover.str.len string_concat.s1.9))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.9) - -; string equal -(declare-fun string_equal.10 () Bool) -(define-fun string_equal.s1.10 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(declare-fun string_equal.idx.10 () cprover.Pos) -(assert (=> string_equal.10 (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.10 (bvult ?n (cprover.str.len string_equal.s1.10))) (= (select string_equal.s1.10 ?n) (select string_equal.s2.10 ?n))))) -(assert (=> (not string_equal.10) (or (not (= (cprover.str.len string_equal.s1.10) (cprover.str.len string_equal.s2.10))) -(and (bvult string_equal.idx.10 (cprover.str.len string_equal.s1.10)) (not (= (select string_equal.s1.10 string_equal.idx.10) (select string_equal.s2.10 string_equal.idx.10))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.10)) - -; convert -(define-fun |B17| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B18| () Bool (= |main::1::t_str2!0@1#1| |main::1::t_str2!0@1#1|)) - -; convert -(define-fun |B19| () Bool (= |main::1::t_str5!0@1#1| |main::1::t_str5!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B32| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B33| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B34| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::t_str2!0@1#1|)) -(get-value (|main::1::t_str5!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 deleted file mode 100644 index 7a3eaadb05f..00000000000 --- a/regression/strings/Z3str2-bv/concat-085/test.c.str.smt2 +++ /dev/null @@ -1,306 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|))) - -(define-fun string.2 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::t_str5!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::t_str5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(define-fun string.3 () cprover.String "abc@") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::t_str2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::t_str2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) - -; convert -(define-fun |B17| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B18| () Bool (= |main::1::t_str2!0@1#1| |main::1::t_str2!0@1#1|)) - -; convert -(define-fun |B19| () Bool (= |main::1::t_str5!0@1#1| |main::1::t_str5!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B32| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) - -; convert -(define-fun |B33| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B34| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$9!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$8!0@1#2|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::t_str2!0@1#1|)) -(get-value (|main::1::t_str5!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-086/test.c b/regression/strings/Z3str2-bv/concat-086/test.c deleted file mode 100644 index 81ec32665f8..00000000000 --- a/regression/strings/Z3str2-bv/concat-086/test.c +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string n1; - __CPROVER_string n2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(n1, __CPROVER_string_concat(__CPROVER_string_literal("ghi"), n2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 deleted file mode 100644 index adb1926b5ad..00000000000 --- a/regression/strings/Z3str2-bv/concat-086/test.c.qarr.smt2 +++ /dev/null @@ -1,586 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.12)) - -(declare-fun string.13 () cprover.String) -(assert (= (select string.13 (_ bv0 32)) (_ bv103 8))) -(assert (= (select string.13 (_ bv1 32)) (_ bv104 8))) -(assert (= (select string.13 (_ bv2 32)) (_ bv105 8))) -(assert (= (cprover.str.len string.13) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.13) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.14 () cprover.String) -(define-fun string_concat.s0.14 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.14 () cprover.String |main::1::n2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.14)) (= (select string_concat.s0.14 ?n) (select string_concat.14 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.14)) (= (select string_concat.s1.14 ?n) (select string_concat.14 (bvadd (cprover.str.len string_concat.s0.14) ?n)))))) -(assert (= (cprover.str.len string_concat.14) (bvadd (cprover.str.len string_concat.s0.14) (cprover.str.len string_concat.s1.14)))) -(assert (bvuge (cprover.str.len string_concat.14) (cprover.str.len string_concat.s0.14))) -(assert (bvuge (cprover.str.len string_concat.14) (cprover.str.len string_concat.s1.14))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.14) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.15 () cprover.String) -(define-fun string_concat.s0.15 () cprover.String |main::1::n1!0@1#1|) -(define-fun string_concat.s1.15 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.15)) (= (select string_concat.s0.15 ?n) (select string_concat.15 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.15)) (= (select string_concat.s1.15 ?n) (select string_concat.15 (bvadd (cprover.str.len string_concat.s0.15) ?n)))))) -(assert (= (cprover.str.len string_concat.15) (bvadd (cprover.str.len string_concat.s0.15) (cprover.str.len string_concat.s1.15)))) -(assert (bvuge (cprover.str.len string_concat.15) (cprover.str.len string_concat.s0.15))) -(assert (bvuge (cprover.str.len string_concat.15) (cprover.str.len string_concat.s1.15))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.15) - -; string equal -(declare-fun string_equal.16 () Bool) -(define-fun string_equal.s1.16 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.16 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.16 () cprover.Pos) -(assert (=> string_equal.16 (= (cprover.str.len string_equal.s1.16) (cprover.str.len string_equal.s2.16)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.16 (bvult ?n (cprover.str.len string_equal.s1.16))) (= (select string_equal.s1.16 ?n) (select string_equal.s2.16 ?n))))) -(assert (=> (not string_equal.16) (or (not (= (cprover.str.len string_equal.s1.16) (cprover.str.len string_equal.s2.16))) -(and (bvult string_equal.idx.16 (cprover.str.len string_equal.s1.16)) (not (= (select string_equal.s1.16 string_equal.idx.16) (select string_equal.s2.16 string_equal.idx.16))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.16)) - -; convert -(define-fun |B28| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B32| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B33| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B34| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B35| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B36| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B48| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B49| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B53| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) - -; convert -(define-fun |B54| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B55| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B56| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B53|)) -(get-value (|B54|)) -(get-value (|B55|)) -(get-value (|B56|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 deleted file mode 100644 index 63b8d905a49..00000000000 --- a/regression/strings/Z3str2-bv/concat-086/test.c.str.smt2 +++ /dev/null @@ -1,454 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B19| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B20| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B21| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B22| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B23| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B24| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B25| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B26| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B27| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(define-fun string.4 () cprover.String "ghi") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.4) - -; find_symbols -(declare-fun |main::1::n2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::n2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::n1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::n1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; convert -(define-fun |B28| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B29| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B30| () Bool (= |main::1::n1!0@1#1| |main::1::n1!0@1#1|)) - -; convert -(define-fun |B31| () Bool (= |main::1::n2!0@1#1| |main::1::n2!0@1#1|)) - -; convert -(define-fun |B32| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B33| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B34| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B35| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B36| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| () cprover.String) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| () cprover.String) -; convert -(define-fun |B38| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| () cprover.String) -; convert -(define-fun |B39| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| () Bool) -; convert -(define-fun |B40| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B41| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B42| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B43| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B44| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B45| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B46| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B47| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B48| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B49| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B50| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B51| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B52| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B53| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) - -; convert -(define-fun |B54| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B55| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B56| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B41|)) -(get-value (|B42|)) -(get-value (|B43|)) -(get-value (|B44|)) -(get-value (|B45|)) -(get-value (|B46|)) -(get-value (|B47|)) -(get-value (|B48|)) -(get-value (|B49|)) -(get-value (|B5|)) -(get-value (|B50|)) -(get-value (|B51|)) -(get-value (|B52|)) -(get-value (|B53|)) -(get-value (|B54|)) -(get-value (|B55|)) -(get-value (|B56|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$14!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$15!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$16!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$13!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::n1!0@1#1|)) -(get-value (|main::1::n2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-087/test.c b/regression/strings/Z3str2-bv/concat-087/test.c deleted file mode 100644 index 115d884bd05..00000000000 --- a/regression/strings/Z3str2-bv/concat-087/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string X; - __CPROVER_string Y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(X, __CPROVER_string_concat(__CPROVER_string_literal("ab"), Y)), __CPROVER_string_concat(Y, __CPROVER_string_concat(__CPROVER_string_literal("ba"), X))) - && (2 == __CPROVER_string_length(X))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 deleted file mode 100644 index 34224e71918..00000000000 --- a/regression/strings/Z3str2-bv/concat-087/test.c.qarr.smt2 +++ /dev/null @@ -1,259 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::Y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::X!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv98 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.4) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.4) - -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::1::X!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.5) - -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::Y!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.6) - -; string equal -(declare-fun string_equal.7 () Bool) -(define-fun string_equal.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.7 () cprover.Pos) -(assert (=> string_equal.7 (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.7 (bvult ?n (cprover.str.len string_equal.s1.7))) (= (select string_equal.s1.7 ?n) (select string_equal.s2.7 ?n))))) -(assert (=> (not string_equal.7) (or (not (= (cprover.str.len string_equal.s1.7) (cprover.str.len string_equal.s2.7))) -(and (bvult string_equal.idx.7 (cprover.str.len string_equal.s1.7)) (not (= (select string_equal.s1.7 string_equal.idx.7) (select string_equal.s2.7 string_equal.idx.7))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.7)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::X!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 deleted file mode 100644 index 7f660ff9ac8..00000000000 --- a/regression/strings/Z3str2-bv/concat-087/test.c.str.smt2 +++ /dev/null @@ -1,207 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "ab") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::Y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) - -(define-fun string.2 () cprover.String "ba") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::X!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::Y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::X!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::Y!0@1#1| |main::1::Y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv2 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::Y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-088/test.c b/regression/strings/Z3str2-bv/concat-088/test.c deleted file mode 100644 index 738115a0ff0..00000000000 --- a/regression/strings/Z3str2-bv/concat-088/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string X; - __CPROVER_string ts0; - __CPROVER_string ts1; - __CPROVER_string ts2; - - if (__CPROVER_string_equal(X, __CPROVER_string_concat(ts0, __CPROVER_string_concat(__CPROVER_string_literal("abc"), ts2))) - && __CPROVER_string_equal(X, __CPROVER_string_literal("abc"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 deleted file mode 100644 index 119fdb48b52..00000000000 --- a/regression/strings/Z3str2-bv/concat-088/test.c.qarr.smt2 +++ /dev/null @@ -1,242 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::ts2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::ts2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::ts0!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::ts0!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::X!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::X!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.5)) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::ts0!0@1#1| |main::1::ts0!0@1#1|)) - -; find_symbols -(declare-fun |main::1::ts1!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::ts1!0@1#1| |main::1::ts1!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::ts2!0@1#1| |main::1::ts2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::ts0!0@1#1|)) -(get-value (|main::1::ts1!0@1#1|)) -(get-value (|main::1::ts2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 deleted file mode 100644 index 62711756758..00000000000 --- a/regression/strings/Z3str2-bv/concat-088/test.c.str.smt2 +++ /dev/null @@ -1,200 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::ts2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::ts2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::ts0!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::ts0!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) - -; find_symbols -(declare-fun |main::1::X!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::X!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B6| () Bool (= |main::1::X!0@1#1| |main::1::X!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::ts0!0@1#1| |main::1::ts0!0@1#1|)) - -; find_symbols -(declare-fun |main::1::ts1!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::ts1!0@1#1| |main::1::ts1!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::ts2!0@1#1| |main::1::ts2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B16| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B17| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::X!0@1#1|)) -(get-value (|main::1::ts0!0@1#1|)) -(get-value (|main::1::ts1!0@1#1|)) -(get-value (|main::1::ts2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-089/test.c b/regression/strings/Z3str2-bv/concat-089/test.c deleted file mode 100644 index 9402c00136a..00000000000 --- a/regression/strings/Z3str2-bv/concat-089/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string Y3; - __CPROVER_string Y4; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("abc")), __CPROVER_string_concat(__CPROVER_string_literal("ef"), y)) - && __CPROVER_string_equal(__CPROVER_string_concat(y, Y3), __CPROVER_string_concat(Y4, x))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 deleted file mode 100644 index 26f80d0129b..00000000000 --- a/regression/strings/Z3str2-bv/concat-089/test.c.qarr.smt2 +++ /dev/null @@ -1,296 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.3) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.5)) - -; find_symbols -(declare-fun |main::1::Y3!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.6 () cprover.String |main::1::Y3!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::Y4!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::Y4!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.8)) - -; convert -(define-fun |B8| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::Y3!0@1#1|)) -(get-value (|main::1::Y4!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 deleted file mode 100644 index 1340c262ff3..00000000000 --- a/regression/strings/Z3str2-bv/concat-089/test.c.str.smt2 +++ /dev/null @@ -1,231 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -; find_symbols -(declare-fun |main::1::Y3!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::Y3!0@1#1|)) - -; find_symbols -(declare-fun |main::1::Y4!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y4!0@1#1| |main::1::x!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) - -; convert -(define-fun |B8| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| () cprover.String) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$6!0@1#2|)) -(get-value (|main::1::Y3!0@1#1|)) -(get-value (|main::1::Y4!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-090/test.c b/regression/strings/Z3str2-bv/concat-090/test.c deleted file mode 100644 index 0b047e5d75e..00000000000 --- a/regression/strings/Z3str2-bv/concat-090/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string Y1; - __CPROVER_string Y2; - __CPROVER_string Y3; - __CPROVER_string Y4; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, Y1), __CPROVER_string_concat(Y2, y)) - && __CPROVER_string_equal(__CPROVER_string_concat(y, Y3), __CPROVER_string_concat(Y4, x))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 deleted file mode 100644 index 67940346d33..00000000000 --- a/regression/strings/Z3str2-bv/concat-090/test.c.qarr.smt2 +++ /dev/null @@ -1,279 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::Y1!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::Y2!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::Y2!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.3)) - -; find_symbols -(declare-fun |main::1::Y3!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::Y3!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.4) - -; find_symbols -(declare-fun |main::1::Y4!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::1::Y4!0@1#1|) -(define-fun string_concat.s1.5 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.5) - -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| string_equal.6)) - -; convert -(define-fun |B8| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::1::Y1!0@1#1|)) -(get-value (|main::1::Y2!0@1#1|)) -(get-value (|main::1::Y3!0@1#1|)) -(get-value (|main::1::Y4!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 deleted file mode 100644 index 24c0bd02559..00000000000 --- a/regression/strings/Z3str2-bv/concat-090/test.c.str.smt2 +++ /dev/null @@ -1,221 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| () Bool) -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::Y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::Y1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::Y2!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::Y2!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; find_symbols -(declare-fun |main::1::Y3!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::y!0@1#1| |main::1::Y3!0@1#1|)) - -; find_symbols -(declare-fun |main::1::Y4!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::Y4!0@1#1| |main::1::x!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|))) - -; convert -(define-fun |B8| () Bool (= |main::1::Y1!0@1#1| |main::1::Y1!0@1#1|)) - -; convert -(define-fun |B9| () Bool (= |main::1::Y2!0@1#1| |main::1::Y2!0@1#1|)) - -; convert -(define-fun |B10| () Bool (= |main::1::Y3!0@1#1| |main::1::Y3!0@1#1|)) - -; convert -(define-fun |B11| () Bool (= |main::1::Y4!0@1#1| |main::1::Y4!0@1#1|)) - -; convert -(define-fun |B12| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B14| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|) - -; convert -(define-fun |B20| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; convert -(define-fun |B21| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::1::Y1!0@1#1|)) -(get-value (|main::1::Y2!0@1#1|)) -(get-value (|main::1::Y3!0@1#1|)) -(get-value (|main::1::Y4!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-091/test.c b/regression/strings/Z3str2-bv/concat-091/test.c deleted file mode 100644 index d07e5dabcfe..00000000000 --- a/regression/strings/Z3str2-bv/concat-091/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x, __CPROVER_string_literal("b")), __CPROVER_string_concat(__CPROVER_string_literal("a"), x))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 deleted file mode 100644 index 77c1ac33177..00000000000 --- a/regression/strings/Z3str2-bv/concat-091/test.c.qarr.smt2 +++ /dev/null @@ -1,172 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.3) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::x!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.5)) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 deleted file mode 100644 index fa275fb8142..00000000000 --- a/regression/strings/Z3str2-bv/concat-091/test.c.str.smt2 +++ /dev/null @@ -1,140 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::x!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B7| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-092/test.c b/regression/strings/Z3str2-bv/concat-092/test.c deleted file mode 100644 index e690be70f42..00000000000 --- a/regression/strings/Z3str2-bv/concat-092/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y; - - if (__CPROVER_string_equal(y, __CPROVER_string_concat(__CPROVER_string_concat(x1, __CPROVER_string_literal("b")), __CPROVER_string_concat(__CPROVER_string_literal("a"), x2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 deleted file mode 100644 index d2b2c37349c..00000000000 --- a/regression/strings/Z3str2-bv/concat-092/test.c.qarr.smt2 +++ /dev/null @@ -1,207 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv98 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.2) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (cprover.str.len string.3) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_concat.s1.4 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.4) - -; string concatenation -(declare-fun string_concat.5 () cprover.String) -(define-fun string_concat.s0.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_concat.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.5)) (= (select string_concat.s0.5 ?n) (select string_concat.5 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.5)) (= (select string_concat.s1.5 ?n) (select string_concat.5 (bvadd (cprover.str.len string_concat.s0.5) ?n)))))) -(assert (= (cprover.str.len string_concat.5) (bvadd (cprover.str.len string_concat.s0.5) (cprover.str.len string_concat.s1.5)))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s0.5))) -(assert (bvuge (cprover.str.len string_concat.5) (cprover.str.len string_concat.s1.5))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.5) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.6 () Bool) -(define-fun string_equal.s1.6 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(declare-fun string_equal.idx.6 () cprover.Pos) -(assert (=> string_equal.6 (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.6 (bvult ?n (cprover.str.len string_equal.s1.6))) (= (select string_equal.s1.6 ?n) (select string_equal.s2.6 ?n))))) -(assert (=> (not string_equal.6) (or (not (= (cprover.str.len string_equal.s1.6) (cprover.str.len string_equal.s2.6))) -(and (bvult string_equal.idx.6 (cprover.str.len string_equal.s1.6)) (not (= (select string_equal.s1.6 string_equal.idx.6) (select string_equal.s2.6 string_equal.idx.6))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| string_equal.6)) - -; convert -(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 deleted file mode 100644 index 061eea0547b..00000000000 --- a/regression/strings/Z3str2-bv/concat-092/test.c.str.smt2 +++ /dev/null @@ -1,165 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "b") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) - -(define-fun string.2 () cprover.String "a") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::1::x2!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|))) - -; convert -(define-fun |B1| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B3| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B5| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; convert -(define-fun |B10| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-093/test.c b/regression/strings/Z3str2-bv/concat-093/test.c deleted file mode 100644 index 69cfaccfb9d..00000000000 --- a/regression/strings/Z3str2-bv/concat-093/test.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("abc"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("ef"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 deleted file mode 100644 index 1947b309590..00000000000 --- a/regression/strings/Z3str2-bv/concat-093/test.c.qarr.smt2 +++ /dev/null @@ -1,448 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (select string.5 (_ bv1 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.5) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.12)) - -; convert -(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 deleted file mode 100644 index 625721594a0..00000000000 --- a/regression/strings/Z3str2-bv/concat-093/test.c.str.smt2 +++ /dev/null @@ -1,350 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) - -(define-fun string.2 () cprover.String "ef") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; convert -(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-094/test.c b/regression/strings/Z3str2-bv/concat-094/test.c deleted file mode 100644 index ebaa91406c9..00000000000 --- a/regression/strings/Z3str2-bv/concat-094/test.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y1; - __CPROVER_string y2; - - if (__CPROVER_string_equal(x, __CPROVER_string_literal("abc -efg ")) - && __CPROVER_string_equal(y1, __CPROVER_string_literal("zzz"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-094/test.c.qarr.smt2 deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-094/test.c.str.smt2 deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/regression/strings/Z3str2-bv/concat-095/test.c b/regression/strings/Z3str2-bv/concat-095/test.c deleted file mode 100644 index 3cab0d79dbc..00000000000 --- a/regression/strings/Z3str2-bv/concat-095/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y1; - __CPROVER_string y2; - - if (__CPROVER_string_equal(x, __CPROVER_string_literal("abc\nefg ")) - && __CPROVER_string_equal(y1, __CPROVER_string_literal("z_ _z-\t-\\'=\"_z"))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 deleted file mode 100644 index 211c0ea58d5..00000000000 --- a/regression/strings/Z3str2-bv/concat-095/test.c.qarr.smt2 +++ /dev/null @@ -1,215 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv10 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) -(assert (= (select string.1 (_ bv5 32)) (_ bv102 8))) -(assert (= (select string.1 (_ bv6 32)) (_ bv103 8))) -(assert (= (select string.1 (_ bv7 32)) (_ bv32 8))) -(assert (= (select string.1 (_ bv8 32)) (_ bv32 8))) -(assert (= (cprover.str.len string.1) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.2 () Bool) -(define-fun string_equal.s1.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.2 () cprover.Pos) -(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) -(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) -(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv122 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv95 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv9 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv95 8))) -(assert (= (select string.3 (_ bv4 32)) (_ bv122 8))) -(assert (= (select string.3 (_ bv5 32)) (_ bv45 8))) -(assert (= (select string.3 (_ bv6 32)) (_ bv9 8))) -(assert (= (select string.3 (_ bv7 32)) (_ bv45 8))) -(assert (= (select string.3 (_ bv8 32)) (_ bv92 8))) -(assert (= (select string.3 (_ bv9 32)) (_ bv39 8))) -(assert (= (select string.3 (_ bv10 32)) (_ bv61 8))) -(assert (= (select string.3 (_ bv11 32)) (_ bv34 8))) -(assert (= (select string.3 (_ bv12 32)) (_ bv95 8))) -(assert (= (select string.3 (_ bv13 32)) (_ bv122 8))) -(assert (= (cprover.str.len string.3) (_ bv14 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.4)) - -; convert -(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 deleted file mode 100644 index 11cda204f42..00000000000 --- a/regression/strings/Z3str2-bv/concat-095/test.c.str.smt2 +++ /dev/null @@ -1,173 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc -efg ") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -(define-fun string.2 () cprover.String "z_ _z- -\'="_z") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; convert -(define-fun |B6| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B7| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-096/test.c b/regression/strings/Z3str2-bv/concat-096/test.c deleted file mode 100644 index c23fadddfd7..00000000000 --- a/regression/strings/Z3str2-bv/concat-096/test.c +++ /dev/null @@ -1,20 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string m1; - __CPROVER_string m2; - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - __CPROVER_string z; - - if (__CPROVER_string_equal(z, __CPROVER_string_concat(x1, __CPROVER_string_concat(__CPROVER_string_literal("c"), x2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(y1, __CPROVER_string_concat(__CPROVER_string_literal("e"), y2))) - && __CPROVER_string_equal(z, __CPROVER_string_concat(m1, __CPROVER_string_concat(__CPROVER_string_literal("ce"), m2)))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 deleted file mode 100644 index e33abd639df..00000000000 --- a/regression/strings/Z3str2-bv/concat-096/test.c.qarr.smt2 +++ /dev/null @@ -1,445 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String string_concat.3) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| string_equal.4)) - -(declare-fun string.5 () cprover.String) -(assert (= (select string.5 (_ bv0 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.5) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.5) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.6 () cprover.String) -(define-fun string_concat.s0.6 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(define-fun string_concat.s1.6 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.6)) (= (select string_concat.s0.6 ?n) (select string_concat.6 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.6)) (= (select string_concat.s1.6 ?n) (select string_concat.6 (bvadd (cprover.str.len string_concat.s0.6) ?n)))))) -(assert (= (cprover.str.len string_concat.6) (bvadd (cprover.str.len string_concat.s0.6) (cprover.str.len string_concat.s1.6)))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s0.6))) -(assert (bvuge (cprover.str.len string_concat.6) (cprover.str.len string_concat.s1.6))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.6) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.7 () cprover.String) -(define-fun string_concat.s0.7 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.7 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.7)) (= (select string_concat.s0.7 ?n) (select string_concat.7 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.7)) (= (select string_concat.s1.7 ?n) (select string_concat.7 (bvadd (cprover.str.len string_concat.s0.7) ?n)))))) -(assert (= (cprover.str.len string_concat.7) (bvadd (cprover.str.len string_concat.s0.7) (cprover.str.len string_concat.s1.7)))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s0.7))) -(assert (bvuge (cprover.str.len string_concat.7) (cprover.str.len string_concat.s1.7))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String string_concat.7) - -; string equal -(declare-fun string_equal.8 () Bool) -(define-fun string_equal.s1.8 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.8 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|) -(declare-fun string_equal.idx.8 () cprover.Pos) -(assert (=> string_equal.8 (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.8 (bvult ?n (cprover.str.len string_equal.s1.8))) (= (select string_equal.s1.8 ?n) (select string_equal.s2.8 ?n))))) -(assert (=> (not string_equal.8) (or (not (= (cprover.str.len string_equal.s1.8) (cprover.str.len string_equal.s2.8))) -(and (bvult string_equal.idx.8 (cprover.str.len string_equal.s1.8)) (not (= (select string_equal.s1.8 string_equal.idx.8) (select string_equal.s2.8 string_equal.idx.8))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.8)) - -(declare-fun string.9 () cprover.String) -(assert (= (select string.9 (_ bv0 32)) (_ bv99 8))) -(assert (= (select string.9 (_ bv1 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.9) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.9) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.10 () cprover.String) -(define-fun string_concat.s0.10 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(define-fun string_concat.s1.10 () cprover.String |main::1::m2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.10)) (= (select string_concat.s0.10 ?n) (select string_concat.10 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.10)) (= (select string_concat.s1.10 ?n) (select string_concat.10 (bvadd (cprover.str.len string_concat.s0.10) ?n)))))) -(assert (= (cprover.str.len string_concat.10) (bvadd (cprover.str.len string_concat.s0.10) (cprover.str.len string_concat.s1.10)))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s0.10))) -(assert (bvuge (cprover.str.len string_concat.10) (cprover.str.len string_concat.s1.10))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.10) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.11 () cprover.String) -(define-fun string_concat.s0.11 () cprover.String |main::1::m1!0@1#1|) -(define-fun string_concat.s1.11 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.11)) (= (select string_concat.s0.11 ?n) (select string_concat.11 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.11)) (= (select string_concat.s1.11 ?n) (select string_concat.11 (bvadd (cprover.str.len string_concat.s0.11) ?n)))))) -(assert (= (cprover.str.len string_concat.11) (bvadd (cprover.str.len string_concat.s0.11) (cprover.str.len string_concat.s1.11)))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s0.11))) -(assert (bvuge (cprover.str.len string_concat.11) (cprover.str.len string_concat.s1.11))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.11) - -; string equal -(declare-fun string_equal.12 () Bool) -(define-fun string_equal.s1.12 () cprover.String |main::1::z!0@1#1|) -(define-fun string_equal.s2.12 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(declare-fun string_equal.idx.12 () cprover.Pos) -(assert (=> string_equal.12 (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.12 (bvult ?n (cprover.str.len string_equal.s1.12))) (= (select string_equal.s1.12 ?n) (select string_equal.s2.12 ?n))))) -(assert (=> (not string_equal.12) (or (not (= (cprover.str.len string_equal.s1.12) (cprover.str.len string_equal.s2.12))) -(and (bvult string_equal.idx.12 (cprover.str.len string_equal.s1.12)) (not (= (select string_equal.s1.12 string_equal.idx.12) (select string_equal.s2.12 string_equal.idx.12))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.12)) - -; convert -(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 deleted file mode 100644 index 30ccf3f93f4..00000000000 --- a/regression/strings/Z3str2-bv/concat-096/test.c.str.smt2 +++ /dev/null @@ -1,350 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B5| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B6| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B7| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; convert -(define-fun |B8| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B16| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B17| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B18| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "c") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2| |main::1::x2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) - -; find_symbols -(declare-fun |main::1::z!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|))) - -(define-fun string.2 () cprover.String "e") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|))) - -(define-fun string.3 () cprover.String "ce") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.3) - -; find_symbols -(declare-fun |main::1::m2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| |main::1::m2!0@1#1|)) - -; find_symbols -(declare-fun |main::1::m1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::1::m1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::z!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|))) - -; convert -(define-fun |B19| () Bool (= |main::1::m1!0@1#1| |main::1::m1!0@1#1|)) - -; convert -(define-fun |B20| () Bool (= |main::1::m2!0@1#1| |main::1::m2!0@1#1|)) - -; convert -(define-fun |B21| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B22| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B23| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; convert -(define-fun |B25| () Bool (= |main::1::z!0@1#1| |main::1::z!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| () cprover.String) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| () cprover.String) -; convert -(define-fun |B27| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| () cprover.String) -; convert -(define-fun |B28| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| () Bool) -; convert -(define-fun |B29| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B30| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B31| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| () cprover.String) -; convert -(define-fun |B32| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B33| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B34| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B35| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B36| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B37| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B38| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) - -; convert -(define-fun |B39| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B40| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B31|)) -(get-value (|B32|)) -(get-value (|B33|)) -(get-value (|B34|)) -(get-value (|B35|)) -(get-value (|B36|)) -(get-value (|B37|)) -(get-value (|B38|)) -(get-value (|B39|)) -(get-value (|B4|)) -(get-value (|B40|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$10!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$11!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$12!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$9!0@1#2|)) -(get-value (|main::1::m1!0@1#1|)) -(get-value (|main::1::m2!0@1#1|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) -(get-value (|main::1::z!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-097/test.c b/regression/strings/Z3str2-bv/concat-097/test.c deleted file mode 100644 index 1a16b0d0b1e..00000000000 --- a/regression/strings/Z3str2-bv/concat-097/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 deleted file mode 100644 index b2b8937b50f..00000000000 --- a/regression/strings/Z3str2-bv/concat-097/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 deleted file mode 100644 index d90dccc262f..00000000000 --- a/regression/strings/Z3str2-bv/concat-097/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-098/test.c b/regression/strings/Z3str2-bv/concat-098/test.c deleted file mode 100644 index 9c649b7d449..00000000000 --- a/regression/strings/Z3str2-bv/concat-098/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 3)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 deleted file mode 100644 index 4bd5a6d75ad..00000000000 --- a/regression/strings/Z3str2-bv/concat-098/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 deleted file mode 100644 index 6eb778c6890..00000000000 --- a/regression/strings/Z3str2-bv/concat-098/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv3 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-099/test.c b/regression/strings/Z3str2-bv/concat-099/test.c deleted file mode 100644 index 5e200a7c3b7..00000000000 --- a/regression/strings/Z3str2-bv/concat-099/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string n; - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_concat(__CPROVER_string_literal("abc"), n), __CPROVER_string_concat(x, y)) - && (__CPROVER_string_length(x) == 5)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 deleted file mode 100644 index c2fc06ac595..00000000000 --- a/regression/strings/Z3str2-bv/concat-099/test.c.qarr.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.1) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|) -(define-fun string_concat.s1.2 () cprover.String |main::1::n!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.3 () cprover.String) -(define-fun string_concat.s0.3 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.3 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.3)) (= (select string_concat.s0.3 ?n) (select string_concat.3 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.3)) (= (select string_concat.s1.3 ?n) (select string_concat.3 (bvadd (cprover.str.len string_concat.s0.3) ?n)))))) -(assert (= (cprover.str.len string_concat.3) (bvadd (cprover.str.len string_concat.s0.3) (cprover.str.len string_concat.s1.3)))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s0.3))) -(assert (bvuge (cprover.str.len string_concat.3) (cprover.str.len string_concat.s1.3))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.4)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 b/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 deleted file mode 100644 index 31793079019..00000000000 --- a/regression/strings/Z3str2-bv/concat-099/test.c.str.smt2 +++ /dev/null @@ -1,180 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::n!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| () cprover.String (str.++ |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| |main::1::n!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B4| () Bool (= |main::1::n!0@1#1| |main::1::n!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B6| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| () cprover.String) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B12| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B13| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::n!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-001/test.c b/regression/strings/Z3str2-bv/length-001/test.c deleted file mode 100644 index 1504149446b..00000000000 --- a/regression/strings/Z3str2-bv/length-001/test.c +++ /dev/null @@ -1,12 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - - if (((unsigned)3) >= ((unsigned)__CPROVER_string_length(x))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 deleted file mode 100644 index de4b90c38e2..00000000000 --- a/regression/strings/Z3str2-bv/length-001/test.c.qarr.smt2 +++ /dev/null @@ -1,96 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B3| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 deleted file mode 100644 index 7f5f5ebdfb3..00000000000 --- a/regression/strings/Z3str2-bv/length-001/test.c.str.smt2 +++ /dev/null @@ -1,100 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B2| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B3| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-002/test.c b/regression/strings/Z3str2-bv/length-002/test.c deleted file mode 100644 index da583e8b664..00000000000 --- a/regression/strings/Z3str2-bv/length-002/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - - if ((__CPROVER_string_equal(x, __CPROVER_string_literal("f")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd"))) - && ((unsigned)__CPROVER_string_length(x)) > ((unsigned)3) - && ((unsigned)__CPROVER_string_length(x)) < ((unsigned)5)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 deleted file mode 100644 index e49abcdb270..00000000000 --- a/regression/strings/Z3str2-bv/length-002/test.c.qarr.smt2 +++ /dev/null @@ -1,297 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$7!0@1#5| () Bool) -; convert -(define-fun |B7| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; convert -(define-fun |B8| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; convert -(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv102 8))) -(assert (= (cprover.str.len string.1) (_ bv1 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.2 () Bool) -(define-fun string_equal.s1.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.2 () cprover.Pos) -(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) -(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) -(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$7!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#3| () Bool |main::$tmp::tmp_if_expr$7!0@1#1|) - -(declare-fun string.3 () cprover.String) -(assert (= (select string.3 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.3 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.3 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.3 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.3) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.3) - -; string equal -(declare-fun string_equal.4 () Bool) -(define-fun string_equal.s1.4 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.4 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|) -(declare-fun string_equal.idx.4 () cprover.Pos) -(assert (=> string_equal.4 (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.4 (bvult ?n (cprover.str.len string_equal.s1.4))) (= (select string_equal.s1.4 ?n) (select string_equal.s2.4 ?n))))) -(assert (=> (not string_equal.4) (or (not (= (cprover.str.len string_equal.s1.4) (cprover.str.len string_equal.s2.4))) -(and (bvult string_equal.idx.4 (cprover.str.len string_equal.s1.4)) (not (= (select string_equal.s1.4 string_equal.idx.4) (select string_equal.s2.4 string_equal.idx.4))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool string_equal.4) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$7!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::tmp_if_expr$7!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))))) - -; convert -(define-fun |B14| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::$tmp::tmp_if_expr$7!0@1#1| |main::$tmp::tmp_if_expr$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::tmp_if_expr$7!0@1#5|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::tmp_if_expr$7!0@1#5|)) - -; convert -(define-fun |B24| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B25| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 deleted file mode 100644 index 48d052838e2..00000000000 --- a/regression/strings/Z3str2-bv/length-002/test.c.str.smt2 +++ /dev/null @@ -1,274 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B3| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B4| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B5| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B6| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$7!0@1#5| () Bool) -; convert -(define-fun |B7| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; convert -(define-fun |B8| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; convert -(define-fun |B9| () Bool |main::$tmp::tmp_if_expr$7!0@1#5|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::tmp_if_expr$7!0@1#5| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "f") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$7!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#3| () Bool |main::$tmp::tmp_if_expr$7!0@1#1|) - -(define-fun string.2 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$7!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$7!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::tmp_if_expr$7!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))))) - -; convert -(define-fun |B14| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B15| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::$tmp::tmp_if_expr$7!0@1#1| |main::$tmp::tmp_if_expr$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| () Bool) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::tmp_if_expr$7!0@1#5|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B22| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::tmp_if_expr$7!0@1#5|)) - -; convert -(define-fun |B24| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B25| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$6!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$5!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$7!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-003/test.c b/regression/strings/Z3str2-bv/length-003/test.c deleted file mode 100644 index 83ec2594e46..00000000000 --- a/regression/strings/Z3str2-bv/length-003/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(y, __CPROVER_string_literal("abcde")) - && __CPROVER_string_equal(y, x) - && ((unsigned)__CPROVER_string_length(x)) <= ((unsigned)5)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 deleted file mode 100644 index c63e690f019..00000000000 --- a/regression/strings/Z3str2-bv/length-003/test.c.qarr.smt2 +++ /dev/null @@ -1,205 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) -(assert (= (select string.1 (_ bv4 32)) (_ bv101 8))) -(assert (= (cprover.str.len string.1) (_ bv5 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.2 () Bool) -(define-fun string_equal.s1.2 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.2 () cprover.Pos) -(assert (=> string_equal.2 (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.2 (bvult ?n (cprover.str.len string_equal.s1.2))) (= (select string_equal.s1.2 ?n) (select string_equal.s2.2 ?n))))) -(assert (=> (not string_equal.2) (or (not (= (cprover.str.len string_equal.s1.2) (cprover.str.len string_equal.s2.2))) -(and (bvult string_equal.idx.2 (cprover.str.len string_equal.s1.2)) (not (= (select string_equal.s1.2 string_equal.idx.2) (select string_equal.s2.2 string_equal.idx.2))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.2)) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::1::x!0@1#1|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B15| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 deleted file mode 100644 index ebcd97aaf6f..00000000000 --- a/regression/strings/Z3str2-bv/length-003/test.c.str.smt2 +++ /dev/null @@ -1,183 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |goto_symex::&92;guard#1|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abcde") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::y!0@1#1| |main::1::x!0@1#1|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B13| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B15| () Bool (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv6 32))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-004/test.c b/regression/strings/Z3str2-bv/length-004/test.c deleted file mode 100644 index 28379a13400..00000000000 --- a/regression/strings/Z3str2-bv/length-004/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(y, x) - && (__CPROVER_string_length(y) == 4) - && (__CPROVER_string_equal(x, __CPROVER_string_literal("fg")) || __CPROVER_string_equal(x, __CPROVER_string_literal("abcd")))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 deleted file mode 100644 index b819e2bc99c..00000000000 --- a/regression/strings/Z3str2-bv/length-004/test.c.qarr.smt2 +++ /dev/null @@ -1,327 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B16| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B17| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.1 () Bool) -(define-fun string_equal.s1.1 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.1 () cprover.String |main::1::x!0@1#1|) -(declare-fun string_equal.idx.1 () cprover.Pos) -(assert (=> string_equal.1 (= (cprover.str.len string_equal.s1.1) (cprover.str.len string_equal.s2.1)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.1 (bvult ?n (cprover.str.len string_equal.s1.1))) (= (select string_equal.s1.1 ?n) (select string_equal.s2.1 ?n))))) -(assert (=> (not string_equal.1) (or (not (= (cprover.str.len string_equal.s1.1) (cprover.str.len string_equal.s2.1))) -(and (bvult string_equal.idx.1 (cprover.str.len string_equal.s1.1)) (not (= (select string_equal.s1.1 string_equal.idx.1) (select string_equal.s2.1 string_equal.idx.1))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.1)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv102 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv103 8))) -(assert (= (cprover.str.len string.2) (_ bv2 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.4 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.4) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::x!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool string_equal.5) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; convert -(define-fun |B18| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B19| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$5!0@1#5|) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B30| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 deleted file mode 100644 index 7421b2d9947..00000000000 --- a/regression/strings/Z3str2-bv/length-004/test.c.str.smt2 +++ /dev/null @@ -1,293 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| () Bool) -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B14| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B15| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |goto_symex::&92;guard#1| (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|))) - -; convert -(define-fun |B16| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#5| () Bool) -; convert -(define-fun |B17| () Bool (and |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#5|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::y!0@1#1| |main::1::x!0@1#1|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) - -(define-fun string.1 () cprover.String "fg") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|))) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#2| () Bool true) - -; find_symbols -(declare-fun |main::$tmp::tmp_if_expr$5!0@1#1| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#3| () Bool |main::$tmp::tmp_if_expr$5!0@1#1|) - -(define-fun string.2 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool (= |main::1::x!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; set_to true (equal) -(define-fun |main::$tmp::tmp_if_expr$5!0@1#4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| () Bool) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3| () Bool (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; set_to true -(assert (= |main::$tmp::tmp_if_expr$5!0@1#5| (or |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::tmp_if_expr$5!0@1#4|))) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3| () cprover.String (ite |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) - -; convert -(define-fun |B18| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B19| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| () Bool) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) - -; convert -(define-fun |B24| () Bool (= |main::$tmp::tmp_if_expr$5!0@1#1| |main::$tmp::tmp_if_expr$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B26| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::tmp_if_expr$5!0@1#5|) - -; convert -(define-fun |B27| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B28| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B29| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) - -; convert -(define-fun |B30| () Bool (not |main::$tmp::tmp_if_expr$5!0@1#5|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B30|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#0|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#3|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$6!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#1|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#2|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#3|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#4|)) -(get-value (|main::$tmp::tmp_if_expr$5!0@1#5|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-005/test.c b/regression/strings/Z3str2-bv/length-005/test.c deleted file mode 100644 index cbde6cd9715..00000000000 --- a/regression/strings/Z3str2-bv/length-005/test.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - - if (__CPROVER_string_equal(__CPROVER_string_literal("abcd"), __CPROVER_string_concat(x, y)) - && ((unsigned)__CPROVER_string_length(y)) >= ((unsigned)3) - && ((unsigned)__CPROVER_string_length(x)) >= ((unsigned)1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 deleted file mode 100644 index eac8fc4c19b..00000000000 --- a/regression/strings/Z3str2-bv/length-005/test.c.qarr.smt2 +++ /dev/null @@ -1,219 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String string_concat.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B16| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 deleted file mode 100644 index a39228d21ed..00000000000 --- a/regression/strings/Z3str2-bv/length-005/test.c.str.smt2 +++ /dev/null @@ -1,200 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B7| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B8| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B9| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| () cprover.String) -; convert -(define-fun |B10| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| () Bool) -; convert -(define-fun |B11| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B12| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B13| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B14| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) - -; convert -(define-fun |B15| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv3 32)))) - -; convert -(define-fun |B16| () Bool (not (bvuge |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-006/test.c b/regression/strings/Z3str2-bv/length-006/test.c deleted file mode 100644 index fd57807ad05..00000000000 --- a/regression/strings/Z3str2-bv/length-006/test.c +++ /dev/null @@ -1,13 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x; - __CPROVER_string y; - - if ((__CPROVER_string_length(__CPROVER_string_concat(x, y)) == 1)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 deleted file mode 100644 index 950ad0fffcc..00000000000 --- a/regression/strings/Z3str2-bv/length-006/test.c.qarr.smt2 +++ /dev/null @@ -1,124 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::y!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String string_concat.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B5| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 deleted file mode 100644 index 62d1e92fac6..00000000000 --- a/regression/strings/Z3str2-bv/length-006/test.c.str.smt2 +++ /dev/null @@ -1,118 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2| () cprover.String (str.++ |main::1::x!0@1#1| |main::1::y!0@1#1|)) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B1| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; convert -(define-fun |B2| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| () cprover.String) -; convert -(define-fun |B3| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B4| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; convert -(define-fun |B5| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-007/test.c b/regression/strings/Z3str2-bv/length-007/test.c deleted file mode 100644 index 03ec7c5c3ba..00000000000 --- a/regression/strings/Z3str2-bv/length-007/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string y1; - __CPROVER_string y2; - - if (__CPROVER_string_equal(__CPROVER_string_concat(x1, x2), __CPROVER_string_literal("testhello")) - && (__CPROVER_string_length(x1) == 1) - && __CPROVER_string_equal(__CPROVER_string_concat(y1, y2), __CPROVER_string_literal("testhello")) - && (__CPROVER_string_length(y2) == 5)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 deleted file mode 100644 index dac159f3a67..00000000000 --- a/regression/strings/Z3str2-bv/length-007/test.c.qarr.smt2 +++ /dev/null @@ -1,328 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::x2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.1) - -(declare-fun string.2 () cprover.String) -(assert (= (select string.2 (_ bv0 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv1 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv2 32)) (_ bv115 8))) -(assert (= (select string.2 (_ bv3 32)) (_ bv116 8))) -(assert (= (select string.2 (_ bv4 32)) (_ bv104 8))) -(assert (= (select string.2 (_ bv5 32)) (_ bv101 8))) -(assert (= (select string.2 (_ bv6 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv7 32)) (_ bv108 8))) -(assert (= (select string.2 (_ bv8 32)) (_ bv111 8))) -(assert (= (cprover.str.len string.2) (_ bv9 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| string_equal.3)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.4 () cprover.String) -(define-fun string_concat.s0.4 () cprover.String |main::1::y1!0@1#1|) -(define-fun string_concat.s1.4 () cprover.String |main::1::y2!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.4)) (= (select string_concat.s0.4 ?n) (select string_concat.4 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.4)) (= (select string_concat.s1.4 ?n) (select string_concat.4 (bvadd (cprover.str.len string_concat.s0.4) ?n)))))) -(assert (= (cprover.str.len string_concat.4) (bvadd (cprover.str.len string_concat.s0.4) (cprover.str.len string_concat.s1.4)))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s0.4))) -(assert (bvuge (cprover.str.len string_concat.4) (cprover.str.len string_concat.s1.4))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String string_concat.4) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.2) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y2!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B14| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B29| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 deleted file mode 100644 index c77c6508da0..00000000000 --- a/regression/strings/Z3str2-bv/length-007/test.c.str.smt2 +++ /dev/null @@ -1,284 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B3| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B4| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B12| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B13| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| |goto_symex::&92;guard#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::1::x2!0@1#1|)) - -(define-fun string.1 () cprover.String "testhello") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) - -; find_symbols -(declare-fun |main::1::y1!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::y2!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| () cprover.String (str.++ |main::1::y1!0@1#1| |main::1::y2!0@1#1|)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y2!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -; convert -(define-fun |B14| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B16| () Bool (= |main::1::y1!0@1#1| |main::1::y1!0@1#1|)) - -; convert -(define-fun |B17| () Bool (= |main::1::y2!0@1#1| |main::1::y2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| () cprover.String) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B23| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B24| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B25| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B26| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) - -; convert -(define-fun |B27| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B28| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B29| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv5 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B27|)) -(get-value (|B28|)) -(get-value (|B29|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$8!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$5!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::y1!0@1#1|)) -(get-value (|main::1::y2!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-008/test.c b/regression/strings/Z3str2-bv/length-008/test.c deleted file mode 100644 index 83449888f8b..00000000000 --- a/regression/strings/Z3str2-bv/length-008/test.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - __CPROVER_string x1; - __CPROVER_string x2; - __CPROVER_string x3; - __CPROVER_string y; - - if (__CPROVER_string_equal(y, __CPROVER_string_concat(x1, __CPROVER_string_concat(x2, x3))) - && __CPROVER_string_equal(x2, __CPROVER_string_literal("abc")) - && (__CPROVER_string_length(x1) == 1) - && (__CPROVER_string_length(y) == 4)) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 deleted file mode 100644 index 4493c79d7d2..00000000000 --- a/regression/strings/Z3str2-bv/length-008/test.c.qarr.smt2 +++ /dev/null @@ -1,303 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x3!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.1 () cprover.String) -(define-fun string_concat.s0.1 () cprover.String |main::1::x2!0@1#1|) -(define-fun string_concat.s1.1 () cprover.String |main::1::x3!0@1#1|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.1)) (= (select string_concat.s0.1 ?n) (select string_concat.1 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.1)) (= (select string_concat.s1.1 ?n) (select string_concat.1 (bvadd (cprover.str.len string_concat.s0.1) ?n)))))) -(assert (= (cprover.str.len string_concat.1) (bvadd (cprover.str.len string_concat.s0.1) (cprover.str.len string_concat.s1.1)))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s0.1))) -(assert (bvuge (cprover.str.len string_concat.1) (cprover.str.len string_concat.s1.1))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String string_concat.1) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; string concatenation -(declare-fun string_concat.2 () cprover.String) -(define-fun string_concat.s0.2 () cprover.String |main::1::x1!0@1#1|) -(define-fun string_concat.s1.2 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s0.2)) (= (select string_concat.s0.2 ?n) (select string_concat.2 ?n))))) -(assert (forall ((?n cprover.Pos)) (=> (bvult ?n (cprover.str.len string_concat.s1.2)) (= (select string_concat.s1.2 ?n) (select string_concat.2 (bvadd (cprover.str.len string_concat.s0.2) ?n)))))) -(assert (= (cprover.str.len string_concat.2) (bvadd (cprover.str.len string_concat.s0.2) (cprover.str.len string_concat.s1.2)))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s0.2))) -(assert (bvuge (cprover.str.len string_concat.2) (cprover.str.len string_concat.s1.2))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String string_concat.2) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; string equal -(declare-fun string_equal.3 () Bool) -(define-fun string_equal.s1.3 () cprover.String |main::1::y!0@1#1|) -(define-fun string_equal.s2.3 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|) -(declare-fun string_equal.idx.3 () cprover.Pos) -(assert (=> string_equal.3 (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.3 (bvult ?n (cprover.str.len string_equal.s1.3))) (= (select string_equal.s1.3 ?n) (select string_equal.s2.3 ?n))))) -(assert (=> (not string_equal.3) (or (not (= (cprover.str.len string_equal.s1.3) (cprover.str.len string_equal.s2.3))) -(and (bvult string_equal.idx.3 (cprover.str.len string_equal.s1.3)) (not (= (select string_equal.s1.3 string_equal.idx.3) (select string_equal.s2.3 string_equal.idx.3))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| string_equal.3)) - -(declare-fun string.4 () cprover.String) -(assert (= (select string.4 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.4 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.4 (_ bv2 32)) (_ bv99 8))) -(assert (= (cprover.str.len string.4) (_ bv3 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.4) - -; string equal -(declare-fun string_equal.5 () Bool) -(define-fun string_equal.s1.5 () cprover.String |main::1::x2!0@1#1|) -(define-fun string_equal.s2.5 () cprover.String |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|) -(declare-fun string_equal.idx.5 () cprover.Pos) -(assert (=> string_equal.5 (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5)))) -(assert (forall ((?n cprover.Pos)) (=> (and string_equal.5 (bvult ?n (cprover.str.len string_equal.s1.5))) (= (select string_equal.s1.5 ?n) (select string_equal.s2.5 ?n))))) -(assert (=> (not string_equal.5) (or (not (= (cprover.str.len string_equal.s1.5) (cprover.str.len string_equal.s2.5))) -(and (bvult string_equal.idx.5 (cprover.str.len string_equal.s1.5)) (not (= (select string_equal.s1.5 string_equal.idx.5) (select string_equal.s2.5 string_equal.idx.5))))))) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| string_equal.5)) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x1!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::y!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x3!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 deleted file mode 100644 index d4f619f8eb7..00000000000 --- a/regression/strings/Z3str2-bv/length-008/test.c.str.smt2 +++ /dev/null @@ -1,265 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| () Bool) -; convert -(define-fun |B0| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B1| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B2| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B3| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; convert -(define-fun |B4| () Bool |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| () Bool) -; convert -(define-fun |B5| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B6| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B7| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B8| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B9| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; convert -(define-fun |B10| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1|)) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B11| () Bool (and |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -; find_symbols -(declare-fun |main::1::x2!0@1#1| () cprover.String) -; find_symbols -(declare-fun |main::1::x3!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2| () cprover.String (str.++ |main::1::x2!0@1#1| |main::1::x3!0@1#1|)) - -; find_symbols -(declare-fun |main::1::x1!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2| () cprover.String (str.++ |main::1::x1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) - -; find_symbols -(declare-fun |main::1::y!0@1#1| () cprover.String) -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2| (= |main::1::y!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|))) - -(define-fun string.1 () cprover.String "abc") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2| () cprover.String string.1) - -; set_to true -(assert (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2| (= |main::1::x2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|))) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::1::x1!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| () (_ BitVec 32) string_length.0) - -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::y!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -; convert -(define-fun |B12| () Bool (= |main::1::x1!0@1#1| |main::1::x1!0@1#1|)) - -; convert -(define-fun |B13| () Bool (= |main::1::x2!0@1#1| |main::1::x2!0@1#1|)) - -; convert -(define-fun |B14| () Bool (= |main::1::x3!0@1#1| |main::1::x3!0@1#1|)) - -; convert -(define-fun |B15| () Bool (= |main::1::y!0@1#1| |main::1::y!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| () cprover.String) -; convert -(define-fun |B16| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| () cprover.String) -; convert -(define-fun |B17| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| () Bool) -; convert -(define-fun |B18| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| () cprover.String) -; convert -(define-fun |B19| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| () Bool) -; convert -(define-fun |B20| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B21| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B22| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|) - -; set_to true -(assert |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B23| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) - -; convert -(define-fun |B24| () Bool (not |main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) - -; convert -(define-fun |B25| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2| (_ bv1 32)))) - -; convert -(define-fun |B26| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| (_ bv4 32)))) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B11|)) -(get-value (|B12|)) -(get-value (|B13|)) -(get-value (|B14|)) -(get-value (|B15|)) -(get-value (|B16|)) -(get-value (|B17|)) -(get-value (|B18|)) -(get-value (|B19|)) -(get-value (|B2|)) -(get-value (|B20|)) -(get-value (|B21|)) -(get-value (|B22|)) -(get-value (|B23|)) -(get-value (|B24|)) -(get-value (|B25|)) -(get-value (|B26|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$5!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strcat$6!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$4!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_equal$7!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$3!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$2!0@1#2|)) -(get-value (|main::1::x1!0@1#1|)) -(get-value (|main::1::x2!0@1#1|)) -(get-value (|main::1::x3!0@1#1|)) -(get-value (|main::1::y!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-009/test.c b/regression/strings/Z3str2-bv/length-009/test.c deleted file mode 100644 index 1899058fbdd..00000000000 --- a/regression/strings/Z3str2-bv/length-009/test.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "../../cprover-string-hack.h" - -int main() -{ - unsigned int i; - __CPROVER_string x; - - if ((__CPROVER_string_length(__CPROVER_string_literal("abcd")) == i) - && ((int)__CPROVER_string_length(x)) > ((int)(i + 1))) { - assert(0); - } - return 0; -} diff --git a/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 b/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 deleted file mode 100644 index 5c1f84b48b5..00000000000 --- a/regression/strings/Z3str2-bv/length-009/test.c.qarr.smt2 +++ /dev/null @@ -1,156 +0,0 @@ -; SMT 2 -; Generated for Z3 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -; string support via PASS-style quantified arrays -(define-sort cprover.Char () (_ BitVec 8)) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-sort cprover.String () (Array cprover.Pos cprover.Char)) -(declare-fun cprover.str.len (cprover.String) cprover.Pos) - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; convert -(define-fun |B1| () Bool |goto_symex::&92;guard#1|) - -; convert -(define-fun |B2| () Bool |goto_symex::&92;guard#1|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B3| () Bool (and |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) Bool)) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) Bool) array_of.0) - -(declare-fun string.1 () cprover.String) -(assert (= (select string.1 (_ bv0 32)) (_ bv97 8))) -(assert (= (select string.1 (_ bv1 32)) (_ bv98 8))) -(assert (= (select string.1 (_ bv2 32)) (_ bv99 8))) -(assert (= (select string.1 (_ bv3 32)) (_ bv100 8))) -(assert (= (cprover.str.len string.1) (_ bv4 32))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) (cprover.str.len |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) (cprover.str.len |main::1::x!0@1#1|)) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (not (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)))) - -; convert -(define-fun |B4| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B9| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) - -; convert -(define-fun |B10| () Bool (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file diff --git a/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 b/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 deleted file mode 100644 index 82bc27d0e39..00000000000 --- a/regression/strings/Z3str2-bv/length-009/test.c.str.smt2 +++ /dev/null @@ -1,157 +0,0 @@ -; SMT 2 -; Generated for CVC 4 -(set-info :source "Generated by CBMC 5.4") -(set-option :produce-models true) -(set-logic ALL_SUPPORTED) -; string support via QF_S SMT-LIB logic -(define-sort cprover.String () String) -(define-sort cprover.Char () String) -(define-sort cprover.Pos () (_ BitVec 32)) -(define-fun cprover.ubv_to_int ((?x cprover.Pos)) Int (bv2nat ?x)) - - -; find_symbols -(declare-fun |goto_symex::&92;guard#1| () Bool) -; convert -(define-fun |B0| () Bool |goto_symex::&92;guard#1|) - -; convert -(define-fun |B1| () Bool |goto_symex::&92;guard#1|) - -; convert -(define-fun |B2| () Bool |goto_symex::&92;guard#1|) - -; find_symbols -(declare-fun |goto_symex::&92;guard#2| () Bool) -; convert -(define-fun |B3| () Bool (and |goto_symex::&92;guard#1| |goto_symex::&92;guard#2|)) - -; set_to true (equal) -(define-fun |__CPROVER_dead_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_deallocated#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_is_new_array#1| () Bool false) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_object#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_malloc_size#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_memory_leak#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_next_thread_id#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_pipe_count#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_rounding_mode!0#1| () (_ BitVec 32) (_ bv0 32)) - -; set_to true (equal) -(define-fun |__CPROVER_thread_id!0#1| () (_ BitVec 32) (_ bv0 32)) - -; the following is a substitute for lambda i. x -(declare-fun array_of.0 () (Array (_ BitVec 32) (_ BitVec 1))) -; set_to true (equal) -(define-fun |__CPROVER_threads_exited#1| () (Array (_ BitVec 32) (_ BitVec 1)) array_of.0) - -(define-fun string.1 () cprover.String "abcd") -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2| () cprover.String string.1) - -(declare-fun string_length.0 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.0|) (str.len |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| () (_ BitVec 32) string_length.0) - -; find_symbols -(declare-fun |main::1::i!0@1#1| () (_ BitVec 32)) -; set_to true -(assert (= |goto_symex::&92;guard#1| (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) - -; find_symbols -(declare-fun |main::1::x!0@1#1| () cprover.String) -(declare-fun string_length.1 () (_ BitVec 32)) -(assert (= (cprover.ubv_to_int |string_length.1|) (str.len |main::1::x!0@1#1|))) -; set_to true (equal) -(define-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2| () (_ BitVec 32) string_length.1) - -; set_to true -(assert (= |goto_symex::&92;guard#2| (not (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)))) - -; convert -(define-fun |B4| () Bool (= |main::1::i!0@1#1| |main::1::i!0@1#1|)) - -; convert -(define-fun |B5| () Bool (= |main::1::x!0@1#1| |main::1::x!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| () cprover.String) -; convert -(define-fun |B6| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B7| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) - -; find_symbols -(declare-fun |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| () (_ BitVec 32)) -; convert -(define-fun |B8| () Bool (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1| |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) - -; set_to true -(assert |goto_symex::&92;guard#1|) - -; set_to true -(assert |goto_symex::&92;guard#2|) - -; convert -(define-fun |B9| () Bool (not (= |main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2| |main::1::i!0@1#1|))) - -; convert -(define-fun |B10| () Bool (bvsge (bvadd (_ bv1 32) |main::1::i!0@1#1|) |main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) - -(check-sat) - -(get-value (|B0|)) -(get-value (|B1|)) -(get-value (|B10|)) -(get-value (|B2|)) -(get-value (|B3|)) -(get-value (|B4|)) -(get-value (|B5|)) -(get-value (|B6|)) -(get-value (|B7|)) -(get-value (|B8|)) -(get-value (|B9|)) -(get-value (|__CPROVER_dead_object#1|)) -(get-value (|__CPROVER_deallocated#1|)) -(get-value (|__CPROVER_malloc_is_new_array#1|)) -(get-value (|__CPROVER_malloc_object#1|)) -(get-value (|__CPROVER_malloc_size#1|)) -(get-value (|__CPROVER_memory_leak#1|)) -(get-value (|__CPROVER_next_thread_id#1|)) -(get-value (|__CPROVER_pipe_count#1|)) -(get-value (|__CPROVER_rounding_mode!0#1|)) -(get-value (|__CPROVER_thread_id!0#1|)) -(get-value (|__CPROVER_threads_exited#1|)) -(get-value (|goto_symex::&92;guard#1|)) -(get-value (|goto_symex::&92;guard#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_string_literal$2!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$1!0@1#2|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#1|)) -(get-value (|main::$tmp::return_value___CPROVER_uninterpreted_strlen$3!0@1#2|)) -(get-value (|main::1::i!0@1#1|)) -(get-value (|main::1::x!0@1#1|)) - -(exit) -; end of SMT2 file From 7ea360c6ae0d4cd8091457853630fb37f9566af3 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 10:20:46 +0100 Subject: [PATCH 141/221] removed changes from the string solver branch that where unecessary --- src/solvers/flattening/boolbv.cpp | 3 --- src/solvers/flattening/boolbv_update.cpp | 19 +++---------------- 2 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/solvers/flattening/boolbv.cpp b/src/solvers/flattening/boolbv.cpp index 9d07e72977a..c41d8440d6c 100644 --- a/src/solvers/flattening/boolbv.cpp +++ b/src/solvers/flattening/boolbv.cpp @@ -720,7 +720,6 @@ Function: boolbvt::boolbv_set_equality_to_true bool boolbvt::boolbv_set_equality_to_true(const equal_exprt &expr) { - if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); @@ -762,8 +761,6 @@ Function: boolbvt::set_to void boolbvt::set_to(const exprt &expr, bool value) { - - if(expr.type().id()!=ID_bool) { error() << "boolbvt::set_to got non-boolean operand: " diff --git a/src/solvers/flattening/boolbv_update.cpp b/src/solvers/flattening/boolbv_update.cpp index d039fef26a6..b40c64286e1 100644 --- a/src/solvers/flattening/boolbv_update.cpp +++ b/src/solvers/flattening/boolbv_update.cpp @@ -18,9 +18,6 @@ Author: Daniel Kroening, kroening@kroening.com #include "boolbv.h" -// for debugging -#include - /*******************************************************************\ Function: boolbvt::convert_update @@ -87,18 +84,11 @@ void boolbvt::convert_update_rec( bvt new_value_bv=convert_bv(new_value); std::size_t new_value_width=boolbv_width(type); - std::cout << "warning: in boolbvt::convert_update_rec we removed a test " << std::endl; - /* - if(new_value_width!=new_value_bv.size()) { - std::cout << "new_value == " << new_value.pretty() << std::endl; - std::cout << "type of new_value == " << type.pretty() << std::endl; + if(new_value_width!=new_value_bv.size()) throw "convert_update_rec: unexpected new_value size"; - } - */ // update - //for(std::size_t i=0; i Date: Mon, 17 Oct 2016 10:29:01 +0100 Subject: [PATCH 142/221] removed changes from the string solver branch that where unecessary --- src/solvers/flattening/boolbv_update.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/solvers/flattening/boolbv_update.cpp b/src/solvers/flattening/boolbv_update.cpp index b40c64286e1..f202347ad6e 100644 --- a/src/solvers/flattening/boolbv_update.cpp +++ b/src/solvers/flattening/boolbv_update.cpp @@ -83,7 +83,7 @@ void boolbvt::convert_update_rec( // done bvt new_value_bv=convert_bv(new_value); std::size_t new_value_width=boolbv_width(type); - + if(new_value_width!=new_value_bv.size()) throw "convert_update_rec: unexpected new_value size"; @@ -207,7 +207,7 @@ void boolbvt::convert_update_rec( else throw "update: member designator needs struct or union"; } - else + else throw "update: unexpected designator"; } From f64c7adbb5b151d171695b17425919363edf6e17 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 10:39:26 +0100 Subject: [PATCH 143/221] returning an error when the same variable is counted several time in an expression that should be added to the index set --- src/solvers/refinement/string_refinement.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 451dfa577ae..c0e6d9e786e 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -383,8 +383,7 @@ decision_proceduret::resultt string_refinementt::dec_solve() if(variable_with_multiple_occurence_in_index) { debug() << "WARNING: some variable appears multiple times" << eom; - return D_SATISFIABLE; - //return D_ERROR; + return D_ERROR; } if(current_index_set.empty()){ From f3e40fdf76797d7ff91b98c035b5ff723b8e7739 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 10:43:39 +0100 Subject: [PATCH 144/221] skipping delete test, for which our solver runs into the problem of having a variable appear several time in the same expression --- regression/strings/java_delete/test.desc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression/strings/java_delete/test.desc b/regression/strings/java_delete/test.desc index 2c1f0a63a3f..377ada44770 100644 --- a/regression/strings/java_delete/test.desc +++ b/regression/strings/java_delete/test.desc @@ -1,4 +1,4 @@ -CORE +KNOWNBUG test_delete.class --pass ^EXIT=10$ From e47460991ec4da43d7c50e206c5b5c666bf50ae9 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 11:13:37 +0100 Subject: [PATCH 145/221] skipping a couple of tests for which we have the problem of a variable appear several time in the same expression --- regression/strings/java_contains/test.desc | 2 +- regression/strings/java_easychair/test.desc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/regression/strings/java_contains/test.desc b/regression/strings/java_contains/test.desc index ef518fabce9..ade6b433bf1 100644 --- a/regression/strings/java_contains/test.desc +++ b/regression/strings/java_contains/test.desc @@ -1,4 +1,4 @@ -CORE +KNOWNBUG test_contains.class --pass ^EXIT=10$ diff --git a/regression/strings/java_easychair/test.desc b/regression/strings/java_easychair/test.desc index bd8da8ab993..bd68fd1f60a 100644 --- a/regression/strings/java_easychair/test.desc +++ b/regression/strings/java_easychair/test.desc @@ -1,4 +1,4 @@ -CORE +KNOWNBUG easychair.class --pass ^EXIT=10$ From e5e3dfbef6f0ab2b0f2df7df6cc190939015403f Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 11:16:34 +0100 Subject: [PATCH 146/221] skipping a couple of tests for which we have the problem of a variable appear several time in the same expression --- regression/strings/test_pass1/test.desc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 5f091f79ee7..2531c253510 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -1,4 +1,4 @@ -CORE +KNOWNBUG test.c --pass ^EXIT=10$ From fd2898cde8de70a427149466ac0cdb2285eecb0b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 17 Oct 2016 11:24:03 +0100 Subject: [PATCH 147/221] skipping a couple of tests for which we have the problem of a variable appear several time in the same expression --- regression/strings/test_contains/test.desc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/regression/strings/test_contains/test.desc b/regression/strings/test_contains/test.desc index a0c672e8d7d..8275425c548 100644 --- a/regression/strings/test_contains/test.desc +++ b/regression/strings/test_contains/test.desc @@ -1,4 +1,4 @@ -CORE +KNOWNBUG test.c --pass ^EXIT=10$ From fc4fadb68673c4cf4acb14c78df058a750b28993 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 18 Oct 2016 14:14:22 +0100 Subject: [PATCH 148/221] some experiment with the format function, not conclusive so far --- src/solvers/refinement/string_expr.cpp | 17 +++++--- src/solvers/refinement/string_refinement.cpp | 42 +++++++++++++++----- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 436f0b25ec4..24a883e0b8a 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -1156,19 +1156,26 @@ void string_exprt::of_string_format(const function_application_exprt &f, std::ma string_exprt begin(char_type); begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); strings.push_back(begin); - std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; - typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - std::cout << "string_exprt::array_tab : " << arg_tab.pretty() << std::endl; + //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; + //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; while(position != std::string::npos) { - std::cout << "string format: position = " << position << std::endl; switch(format_string[position+1]) { case 'd' : { string_exprt str(char_type); - str.of_int(typecast_exprt(index_exprt(arg_tab,refined_string_typet::index_of_int(arg_counter++)), signedbv_typet(32)),axioms,is_c_string,10); + index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); + typecast_exprt arg_int(arg_object, signedbv_typet(32)); + symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); + axioms.push_back(equal_exprt(arg_int,var_arg_int)); + axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); + str.of_int(var_arg_int,axioms,is_c_string,10); + strings.push_back(str); + std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; break; } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index c0e6d9e786e..57ba1840df4 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -83,8 +83,27 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) return bv; } else { - debug() << "string_refinementt::convert_pointer_type("<< pretty_short(expr) << ")" << eom; - return SUB::convert_pointer_type(expr); + if(expr.id()==ID_typecast) + { + if(expr.operands().size()!=1) + throw "typecast takes one operand"; + + const exprt &op=expr.op0(); + const typet &op_type=ns.follow(op.type()); + + if(op_type.id()==ID_pointer) + return convert_pointer_type(op); + else if(op_type.id()==ID_signedbv || + op_type.id()==ID_unsignedbv) + { + debug() << "string_refinementt::convert_pointer_type("<< pretty_short(expr) << ")" << eom; + debug() << "details:"<< op.pretty() << ")" << eom; + return convert_bv(typecast_exprt(op,unsignedbv_typet(64))); + } + } + else{ + return SUB::convert_pointer_type(expr); + } } } @@ -133,10 +152,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) auto duration = std::chrono::duration_cast(t1-start_time).count(); - debug() << "string_refinementt::boolbv_set_equality_to_true " - << " at time(ms): " - << (duration / 1000) << eom; - if(!equality_propagation) return true; const typet &type=ns.follow(expr.lhs().type()); @@ -146,7 +161,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - debug() << " " << pretty_short(expr.lhs()) << " <- " + debug() << "string_refinementt(" << (duration / 1000) << "ms)"; + debug() << " " << pretty_short(expr.lhs()) << " <- " << pretty_short(expr.rhs()) << eom; if(refined_string_typet::is_unrefined_string_type(type)) { @@ -426,9 +442,17 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) { - if (!seen_instances.insert(lemma).second) return; + if (!seen_instances.insert(lemma).second) + { + debug() << "string_refinementt::add_lemma : already seen" << eom; + return; + } - if(lemma == true_exprt()) { debug() << "string_refinementt::add_lemma : tautology" << eom; return; } + if(lemma == true_exprt()) + { + debug() << "string_refinementt::add_lemma : tautology" << eom; + return; + } debug() << "adding lemma " << pretty_short(lemma) << eom; From 404760d3a98fcdf9489138c829bcd5be39348268 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 18 Oct 2016 15:39:17 +0100 Subject: [PATCH 149/221] restructuration using a constraint generator --- src/solvers/Makefile | 1 + src/solvers/refinement/string_constraint.cpp | 5 + src/solvers/refinement/string_constraint.h | 3 + .../string_constraint_generator.cpp | 1205 +++++++++++++++++ .../refinement/string_constraint_generator.h | 148 ++ src/solvers/refinement/string_expr.cpp | 1170 ---------------- src/solvers/refinement/string_expr.h | 64 - 7 files changed, 1362 insertions(+), 1234 deletions(-) create mode 100644 src/solvers/refinement/string_constraint_generator.cpp create mode 100644 src/solvers/refinement/string_constraint_generator.h diff --git a/src/solvers/Makefile b/src/solvers/Makefile index 4003e19c39a..aadf2307495 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -123,6 +123,7 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ refinement/refined_string_type.cpp \ refinement/string_expr.cpp \ refinement/string_refinement.cpp \ + refinement/string_constraint_generator.cpp \ miniBDD/miniBDD.cpp INCLUDES= -I .. \ diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index c6fbf6016db..d2dda73ef7f 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -41,6 +41,11 @@ string_constraintt string_constraintt::forall(const symbol_exprt & univ, const e return sc; } +string_constraintt string_constraintt::forall(const symbol_exprt & univ, const exprt & bound_sup) +{ + return forall(univ,refined_string_typet::index_zero(),bound_sup); +} + string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1) diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 58c0211e2d5..977930bb088 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -12,6 +12,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +#include class string_constraintt : public exprt { @@ -49,6 +50,8 @@ class string_constraintt : public exprt // Add an universal quantifier string_constraintt forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup); + // Default bound inferior is 0 + string_constraintt forall(const symbol_exprt & univ, const exprt & bound_sup); // Bound a variable that is existentially quantified string_constraintt exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp new file mode 100644 index 00000000000..67411319ca9 --- /dev/null +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -0,0 +1,1205 @@ +/** -*- C++ -*- *****************************************************\ + +Module: Constraint generation from string function calls + for the PASS algorithm (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#include +#include +#include + +constant_exprt string_constraint_generatort::constant_char(int i) +{ +switch(language) + { + case C : +return constant_exprt(integer2binary(i,STRING_SOLVER_CHAR_WIDTH),refined_string_typet::char_type()); +break; + case JAVA : return constant_exprt(integer2binary(i,JAVA_STRING_SOLVER_CHAR_WIDTH),refined_string_typet::java_char_type()); +break; + default: assert(false); +} +} + +void string_constraint_generatort::check_char_type(const exprt & str) +{ + if(language == C) + assert(refined_string_typet::is_c_string_type(str.type())); + else + if(language == UNKNOWN) + if(refined_string_typet::is_c_string_type(str.type())) + language = C; + else + language = JAVA; + +} + +string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) +{ + unsignedbv_typet char_type; + + if(refined_string_typet::is_c_string_type(unrefined_string.type())) + char_type = refined_string_typet::char_type(); + else + char_type = refined_string_typet::java_char_type(); + + string_exprt s(char_type); + + if(unrefined_string.id()==ID_function_application) + s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); + else if(unrefined_string.id()==ID_symbol) + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); + else if(unrefined_string.id()==ID_address_of) { + assert(unrefined_string.op0().id()==ID_symbol); + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); + } + else if(unrefined_string.id()==ID_if) + s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); + else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { + // We ignore non deterministic symbols and struct + } + else + throw ("string_exprt of:\n" + unrefined_string.pretty() + + "\nwhich is not a function application, a symbol or an if expression"); + + axioms.emplace_back(s >= refined_string_typet::index_zero()); + return s; +} + + + +string_exprt string_constraint_generatort::of_if(const if_exprt &expr) +{ + assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); + string_exprt t = string_of_expr(expr.true_case()); + assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); + string_exprt f = string_of_expr(expr.false_case()); + + axioms.emplace_back(expr.cond(),equal_exprt(length(),t.length())); + symbol_exprt qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); + axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,t.length())); + + axioms.emplace_back(not_exprt(expr.cond()),equal_exprt(length(),f.length())); + symbol_exprt qvar2 = fresh_symbol("string_if_false",refined_string_typet::index_type()); + axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])).forall(qvar2,f.length())); +} + + +string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { + if(refined_string_typet::is_c_string_type(sym.type())) { + irep_idt id = sym.get_identifier(); + std::map::iterator f = symbol_to_string.find(id); + if(f == symbol_to_string.end()) { + symbol_to_string[id]= string_exprt(refined_string_typet::char_type()); + return symbol_to_string[id]; + } else return f->second; + } else { // otherwise we assume it is a java string + irep_idt id = sym.get_identifier(); + std::map::iterator f = symbol_to_string.find(id); + if(f == symbol_to_string.end()) { + symbol_to_string[id]= string_exprt(refined_string_typet::java_char_type()); + return symbol_to_string[id]; + } else return f->second; + } + +} + + +string_exprt string_constraint_generatort::of_function_application(const function_application_exprt & expr) +{ + const exprt &name = expr.function(); + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + if(starts_with(id,cprover_string_literal_func)) + return of_string_literal(expr,axioms); + else if(starts_with(id,cprover_string_concat_func)) + return of_string_concat(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_int_func)) + return of_string_concat_int(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_long_func)) + return of_string_concat_long(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_bool_func)) + return of_string_concat_bool(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_char_func)) + return of_string_concat_char(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_double_func)) + return of_string_concat_double(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_float_func)) + return of_string_concat_float(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_concat_code_point_func)) + return of_string_concat_code_point(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_func)) + return of_string_insert(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_int_func)) + return of_string_insert_int(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_long_func)) + return of_string_insert_long(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_bool_func)) + return of_string_insert_bool(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_char_func)) + return of_string_insert_char(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_double_func)) + return of_string_insert_double(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_insert_float_func)) + return of_string_insert_float(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_substring_func)) + return of_string_substring(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_trim_func)) + return of_string_trim(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_to_lower_case_func)) + return of_string_to_lower_case(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_to_upper_case_func)) + return of_string_to_upper_case(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_char_set_func)) + return of_string_char_set(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_value_of_func)) + return of_string_value_of(expr,axioms); + else if(starts_with(id,cprover_string_empty_string_func)) + return of_empty_string(expr,axioms); + else if(starts_with(id,cprover_string_copy_func)) + return of_string_copy(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_of_int_func)) + return of_int(expr,axioms); + else if(starts_with(id,cprover_string_of_int_hex_func)) + return of_int_hex(expr,axioms); + else if(starts_with(id,cprover_string_of_float_func)) + return of_float(expr,axioms); + else if(starts_with(id,cprover_string_of_double_func)) + return of_double(expr,axioms); + else if(starts_with(id,cprover_string_of_long_func)) + return of_long(expr,axioms); + else if(starts_with(id,cprover_string_of_bool_func)) + return of_bool(expr,axioms); + else if(starts_with(id,cprover_string_of_char_func)) + return of_char(expr,axioms); + else if(starts_with(id,cprover_string_set_length_func)) + return of_string_set_length(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_delete_func)) + return of_string_delete(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_delete_char_at_func)) + return of_string_delete_char_at(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_replace_func)) + return of_string_replace(expr,symbol_to_string,axioms); + else if(starts_with(id,cprover_string_format_func)) + return of_string_format(expr,symbol_to_string,axioms); + else { + std::string msg("string_exprt::of_function_application: unknown symbol :"); + msg+=id.c_str(); + throw msg; + } + } + throw "string_exprt::of_function_application: not a string function"; +} + +irep_idt string_constraint_generatort::extract_java_string(const symbol_exprt & s){ + std::string tmp(s.get(ID_identifier).c_str()); + std::string value = tmp.substr(31); + return irep_idt(value); +} + +string_exprt string_constraint_generatort::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ + + std::string str = sval.c_str(); + // should only do this for java + std::wstring utf16 = utf8_to_utf16(str); + // warning: endianness should be used as a flag when using this function + + for (std::size_t i = 0; i < utf16.size(); ++i) { + std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); + constant_exprt idx(idx_binary, refined_string_typet::index_type()); + // warning: this should disappear if utf8_to_utf16 takes into account endianness + wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); + + std::string sval_binary=integer2binary((unsigned)big_endian, char_width); + constant_exprt c(sval_binary,char_type); + equal_exprt lemma(index_exprt(content(), idx), c); + axioms.emplace_back(lemma,true); + } + + std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); + exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); + + axioms.emplace_back(equal_exprt(length(),s_length)); +} + +string_exprt string_constraint_generatort::of_empty_string(const function_application_exprt &f, axiom_vect & axioms) +{ + assert(f.arguments().size() == 0); + axioms.emplace_back(equal_exprt(length(),refined_string_typet::index_zero())); +} + +string_exprt string_constraint_generatort::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); //bad args to string literal? + const exprt &arg = args[0]; + + irep_idt sval; + int char_width; + unsignedbv_typet char_type; + + if (arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant) { + // C string constant + + const exprt &s = arg.op0().op0().op0(); + sval = to_string_constant(s).get_value(); + char_width = STRING_SOLVER_CHAR_WIDTH; + char_type = refined_string_typet::char_type(); + + } else { + // Java string constant + assert (arg.operands().size() == 1); + assert(refined_string_typet::is_unrefined_string_type(arg.type())); + const exprt &s = arg.op0(); + + //it seems the value of the string is lost, we need to recover it from the identifier + sval = extract_java_string(to_symbol_expr(s)); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + char_type = refined_string_typet::java_char_type(); + } + + of_string_constant(sval,char_width,char_type,axioms); +} + + +string_exprt string_constraint_generatort::of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms) { + equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); + axioms.emplace_back(length_sum_lem); + + symbol_exprt idx = fresh_symbol("QA_index_concat",refined_string_typet::index_type()); + + string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + axioms.push_back(a1.forall(idx, s1.length())); + + + symbol_exprt idx2 = fresh_symbol("QA_index_concat2",refined_string_typet::index_type()); + + string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); + axioms.push_back(a2.forall(idx2, s2.length())); +} + +string_exprt string_constraint_generatort::of_string_concat(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string concat + + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2 = string_of_expr(args[1]); + + of_string_concat(s1, s2, axioms); +} + + + +string_exprt string_constraint_generatort::of_string_copy(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + + string_exprt s1 = string_of_expr(args[0]); + axioms.emplace_back(equal_exprt(length(), s1.length())); + symbol_exprt idx = fresh_symbol("QA_index_copy",refined_string_typet::index_type()); + string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + axioms.push_back(a1.forall(idx, s1.length())); +} + +string_exprt string_constraint_generatort::of_string_set_length(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + + bool is_c_string = refined_string_typet::is_c_string_type(f.type()); + exprt null_char; + if(is_c_string) null_char = constant_char(0); + else null_char = constant_java_char(0); + + string_exprt s1 = string_of_expr(args[0]); + + // |s| = k + // && forall i < |s|. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) + + axioms.emplace_back(equal_exprt(length(), args[1])); + symbol_exprt idx = fresh_symbol("QA_index_set_length",refined_string_typet::index_type()); + + + string_constraintt a1 + (and_exprt(implies_exprt(s1 > idx, equal_exprt(s1[idx],(*this)[idx])), + implies_exprt(s1 <= idx, equal_exprt(s1[idx],null_char)))); + axioms.push_back(a1.forall(idx, length())); +} + + + +string_exprt string_constraint_generatort::of_java_char_array(const exprt & char_array, axiom_vect & axioms) +{ + exprt arr = to_address_of_expr(char_array).object(); + exprt len = member_exprt(arr, "length",length().type()); + exprt cont = member_exprt(arr, "data",content().type()); + op0() = len; + op1() = cont; +} + + +string_exprt string_constraint_generatort::of_string_value_of(const function_application_exprt &f, axiom_vect & axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + if(args.size() == 3) + { + exprt char_array = args[0]; + exprt offset = args[1]; + exprt count = args[2]; + string_exprt str(refined_string_typet::java_char_type()); + str.of_java_char_array(args[0],axioms); + axioms.emplace_back(equal_exprt(length(), count)); + + symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); + axioms.push_back(a1.forall(idx, count)); + } + else + { + assert(args.size() == 1); + of_java_char_array(args[0],axioms); + } +} + +string_exprt string_constraint_generatort::of_string_substring +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() >= 2); + + string_exprt str = string_of_expr(args[0]); + + exprt i(args[1]); + + exprt j; + if(args.size() == 3) j = args[2]; + else j = str.length(); + + of_string_substring(str,i,j,symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_substring + (const string_exprt & str, const exprt & start, const exprt & end) +{ + symbol_exprt idx = fresh_symbol("index_substring", refined_string_typet::index_type()); + assert(start.type() == refined_string_typet::index_type()); + assert(end.type() == refined_string_typet::index_type()); + + axioms.emplace_back(equal_exprt(length(), minus_exprt(end, start))); + axioms.emplace_back(binary_relation_exprt(start, ID_lt, end)); + axioms.emplace_back(str >= end); + + // forall idx < str.length, str[idx] = arg_str[idx+i] + string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(start, idx)])); + + axioms.push_back(a.forall(idx,length())); +} + +string_exprt string_constraint_generatort::of_string_trim +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + string_exprt str = string_of_expr(args[0]); + symbol_exprt idx = fresh_symbol("index_trim", refined_string_typet::index_type()); + + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt space_char = is_c_string ? constant_char(32) : constant_java_char(32); + + // m + |s1| <= |str| + axioms.emplace_back(str >= plus_exprt(idx, length())); + axioms.emplace_back(binary_relation_exprt(idx, ID_ge, refined_string_typet::index_zero())); + axioms.emplace_back(str >= idx); + axioms.emplace_back(str >= length()); + ///axioms.emplace_back(binary_relation_exprt(length(), ID_gt, index_zero)); + + symbol_exprt n = fresh_symbol("QA_index_trim",refined_string_typet::index_type()); + // forall n < m, str[n] = ' ' + string_constraintt a(equal_exprt(str[n], space_char)); + axioms.push_back(a.forall(n,idx)); + + symbol_exprt n2 = fresh_symbol("QA_index_trim2",refined_string_typet::index_type()); + // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' + string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); + axioms.push_back(a1.forall(n2,minus_exprt(str.length(),plus_exprt(idx,length())))); + + symbol_exprt n3 = fresh_symbol("QA_index_trim3",refined_string_typet::index_type()); + // forall n < |s1|, s[idx+n] = s1[n] + string_constraintt a2(equal_exprt((*this)[n3], str[plus_exprt(n3, idx)])); + axioms.push_back(a2.forall(n3,length())); + // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| + or_exprt m_index_condition(equal_exprt(idx,str.length()), + and_exprt + (not_exprt(equal_exprt(str[idx],space_char)), + not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char)))); + axioms.push_back(m_index_condition); +} + +string_exprt string_constraint_generatort::of_string_to_lower_case +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + + string_exprt str = string_of_expr(args[0]); + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt char_a; + exprt char_A; + exprt char_z; + exprt char_Z; + if(is_c_string) { + char_a = constant_char(97); + char_A = constant_char(65); + char_z = constant_char(122); + char_Z = constant_char(90); + } else { + char_a = constant_char(97); + char_A = constant_char(65); + char_z = constant_char(122); + char_Z = constant_char(90); + } + + axioms.emplace_back(equal_exprt(length(), str.length())); + + symbol_exprt idx = fresh_symbol("QA_lower_case",refined_string_typet::index_type()); + // forall idx < str.length, this[idx] = 'A'<=str[idx]<='Z' ? str[idx]+'a'-'A' : str[idx] + exprt is_upper_case = and_exprt(binary_relation_exprt(char_A,ID_le,str[idx]), + binary_relation_exprt(str[idx],ID_le,char_Z)); + equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); + equal_exprt eq((*this)[idx], str[idx]); + string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); + axioms.push_back(a.forall(idx,length())); +} + + +string_exprt string_constraint_generatort::of_string_to_upper_case +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + + string_exprt str = string_of_expr(args[0]); + bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); + exprt char_a; + exprt char_A; + exprt char_z; + exprt char_Z; + + if(is_c_string) { + char_a = constant_char(97); + char_A = constant_char(65); + char_z = constant_char(122); + char_Z = constant_char(90); + } else { + char_a = constant_char(97); + char_A = constant_char(65); + char_z = constant_char(122); + char_Z = constant_char(90); + } + + axioms.emplace_back(equal_exprt(length(), str.length())); + + symbol_exprt idx = fresh_symbol("QA_upper_case",refined_string_typet::index_type()); + // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] + exprt is_lower_case = and_exprt(binary_relation_exprt(char_a,ID_le,str[idx]), + binary_relation_exprt(str[idx],ID_le,char_z)); + equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); + equal_exprt eq((*this)[idx], str[idx]); + string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); + axioms.push_back(a.forall(idx,length())); +} + + +string_exprt string_constraint_generatort::of_int +(const function_application_exprt &expr,axiom_vect & axioms) +{ + assert(expr.arguments().size() == 1); + of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),10); +} + +string_exprt string_constraint_generatort::of_long +(const function_application_exprt &expr,axiom_vect & axioms) +{ + assert(expr.arguments().size() == 1); + of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),30); +} + + +string_exprt string_constraint_generatort::of_float +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),false); +} + +string_exprt string_constraint_generatort::of_float +(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision) +{ + // Warning: we currently only have partial specification + unsignedbv_typet char_type; + int char_width; + if(is_c_string) { + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + } + + axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(24))); + + + string_exprt magnitude(char_type); + string_exprt sign_string(char_type); + + // If the argument is NaN, the result is the string "NaN". + string_exprt nan_string(char_type); + nan_string.of_string_constant("NaN",char_width,char_type,axioms); + + ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); + + exprt isnan = float_bvt().isnan(f,fspec); + axioms.emplace_back(isnan, equal_exprt(magnitude.length(),nan_string.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_nan", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) + ).forall(qvar,nan_string.length())); + + // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. + + const bitvector_typet &bv_type=to_bitvector_type(f.type()); + unsigned width=bv_type.get_width(); + exprt isneg = extractbit_exprt(f, width-1); + + axioms.emplace_back(isneg, equal_exprt(sign_string.length(),refined_string_typet::index_of_int(1))); + + axioms.emplace_back(not_exprt(isneg), equal_exprt(sign_string.length(),refined_string_typet::index_of_int(0))); + axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_char(0x2D); + + + // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". + + string_exprt infinity_string(char_type); + infinity_string.of_string_constant("Infinity",char_width,char_type,axioms); + exprt isinf = float_bvt().isinf(f,fspec); + axioms.emplace_back(isinf, equal_exprt(magnitude.length(),infinity_string.length())); + symbol_exprt qvar_inf = string_exprt::fresh_symbol("qvar_equal_infinity", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) + ).forall(qvar_inf,infinity_string.length())); + + //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". + + string_exprt zero_string(char_type); + zero_string.of_string_constant("0.0",char_width,char_type,axioms); + exprt iszero = float_bvt().is_zero(f,fspec); + axioms.emplace_back(iszero, equal_exprt(magnitude.length(),zero_string.length())); + symbol_exprt qvar_zero = string_exprt::fresh_symbol("qvar_equal_zero", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) + ).forall(qvar_zero,zero_string.length())); + + + /* + ieee_floatt milli(fspec); + milli.from_float(0.001); + ieee_floatt decamega(fspec); + decamega.from_float(1e7); + exprt scientific = or_exprt + (float_bvt().relation(f,float_bvt().LT,milli.to_expr(),fspec), + float_bvt().relation(f,float_bvt().GE,decamega.to_expr(),fspec)); + */ + + // If m is greater than or equal to 10^-3 but less than 10^7, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. + + //string_exprt integer_part(char_type); + //exprt integer = float_bvt().to_integer(float_bvt.abs(f,fspec),32,true,fspec); + + //integer_part.of_int(integer); + //string_exprt dot_string(char_type); + //dot_string.of_string_constant(".",char_width,char_type,axioms); + + //string_exprt fractional_part(char_type); + + /* Here is the remainder of the specification of Float.toString, for the magnitude m : + + If m is less than 10^-3 or greater than or equal to 10^7, then it is represented in so-called "computerized scientific notation." Let n be the unique integer such that 10n ≤ m < 10n+1; then let a be the mathematically exact quotient of m and 10n so that 1 ≤ a < 10. The magnitude is then represented as the integer part of a, as a single decimal digit, followed by '.' ('\u002E'), followed by decimal digits representing the fractional part of a, followed by the letter 'E' ('\u0045'), followed by a representation of n as a decimal integer, as produced by the method Integer.toString(int). + + How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ + + of_string_concat(sign_string,magnitude,axioms); + + + /* + exprt char_0 = constant_of_nat(48,char_width,char_type); + exprt char_9 = constant_of_nat(57,char_width,char_type); + exprt char_dot = constant_of_nat(46,char_width,char_type); + + symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); + exprt c = (*this)[idx]; + exprt is_digit = + or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), + binary_relation_exprt(c,ID_le,char_9)), + equal_exprt(c,char_dot) + ); + string_constraintt a(is_digit);*/ + //axioms.push_back(a.forall(idx,index_zero,length())); + + +} + +string_exprt string_constraint_generatort::of_double +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),true); +} + + +string_exprt string_constraint_generatort::of_bool +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_bool(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); + +} + +string_exprt string_constraint_generatort::of_bool +(const exprt &i,axiom_vect & axioms,bool is_c_string) +{ + unsignedbv_typet char_type; + int char_width; + if(is_c_string) { + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + } + + assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); + + typecast_exprt eq(i,bool_typet()); + + string_exprt true_string(char_type); + string_exprt false_string(char_type); + true_string.of_string_constant("true",char_width,char_type,axioms); + false_string.of_string_constant("false",char_width,char_type,axioms); + + axioms.emplace_back(eq, equal_exprt(length(),true_string.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_true", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(eq,equal_exprt((*this)[qvar],true_string[qvar]) + ).forall(qvar,true_string.length())); + + axioms.emplace_back(not_exprt(eq), equal_exprt(length(),false_string.length())); + symbol_exprt qvar1 = string_exprt::fresh_symbol("qvar_equal_false", refined_string_typet::index_type()); + axioms.push_back + (string_constraintt(not_exprt(eq),equal_exprt((*this)[qvar1],false_string[qvar1]) + ).forall(qvar,false_string.length())); + + + +} + + +string_exprt string_constraint_generatort::of_int +(const exprt &i,axiom_vect & axioms,bool is_c_string, int max_size) +{ + typet type = i.type(); + int width = type.get_unsigned_int(ID_width); + exprt ten = constant_of_nat(10,width,type); + exprt zero_char; + exprt nine_char; + exprt minus_char; + + if(is_c_string) { + minus_char = constant_char(45); + zero_char = constant_char(48); + nine_char = constant_char(57); + } else { + minus_char = constant_char(45); + zero_char = constant_char(48); + nine_char = constant_char(57); + } + + axioms.emplace_back(and_exprt(*this > refined_string_typet::index_zero(),*this <= refined_string_typet::index_of_int(max_size))); + + exprt chr = (*this)[refined_string_typet::index_zero()]; + exprt starts_with_minus = equal_exprt(chr,minus_char); + exprt starts_with_digit = and_exprt + (binary_relation_exprt(chr,ID_ge,zero_char), + binary_relation_exprt(chr,ID_le,nine_char)); + axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); + + for(unsigned size=1; size<=max_size;size++) { + exprt sum = constant_of_nat(0,width,type); + exprt all_numbers = true_exprt(); + chr = (*this)[refined_string_typet::index_of_int(0)]; + exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); + + for(unsigned j=1; j1) { + axioms.emplace_back(and_exprt(premise,starts_with_digit), + not_exprt(equal_exprt((*this)[refined_string_typet::index_zero()],zero_char))); + axioms.emplace_back(and_exprt(premise,starts_with_minus), + not_exprt(equal_exprt((*this)[refined_string_typet::index_of_int(1)],zero_char))); + } + + //we have to be careful when exceeding the maximal size of integers + // Warning this should be different depending on max size + if(size == max_size) { + exprt smallest_with_10_digits = constant_of_nat(1000000000,width,type); + axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); + } + } +} + + +exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { + exprt zero_char = constant_of_nat(48,char_width,char_type); + exprt nine_char = constant_of_nat(57,char_width,char_type); + exprt a_char = constant_of_nat(0x61,char_width,char_type); + return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), + minus_exprt(chr,constant_of_nat(0x61 - 10,char_width,char_type)), + minus_exprt(chr,zero_char)); +} + + +string_exprt string_constraint_generatort::of_int_hex +(const exprt &i,axiom_vect & axioms,bool is_c_string) +{ + typet type = i.type(); + int width = type.get_unsigned_int(ID_width); + exprt sixteen = constant_of_nat(16,width,type); + typet char_type; + unsigned char_width; + + if(is_c_string) { + char_type = refined_string_typet::char_type(); + char_width = STRING_SOLVER_CHAR_WIDTH; + } else { + char_type = refined_string_typet::java_char_type(); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + } + + exprt minus_char = constant_of_nat(45,char_width,char_type); + exprt zero_char = constant_of_nat(48,char_width,char_type); + exprt nine_char = constant_of_nat(57,char_width,char_type); + exprt a_char = constant_of_nat(0x61,char_width,char_type); + exprt f_char = constant_of_nat(0x66,char_width,char_type); + + int max_size = 8; + axioms.emplace_back(and_exprt(*this > refined_string_typet::index_zero(),*this <= refined_string_typet::index_of_int(max_size))); + + for(int size=1; size<=max_size;size++) { + exprt sum = constant_of_nat(0,width,type); + exprt all_numbers = true_exprt(); + exprt chr = (*this)[refined_string_typet::index_of_int(0)]; + + for(int j=0; j1) { + axioms.emplace_back(premise, + not_exprt(equal_exprt((*this)[refined_string_typet::index_zero()],zero_char))); + } + + } +} + +string_exprt string_constraint_generatort::of_int_hex +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_int_hex(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); +} + +string_exprt string_constraint_generatort::of_char +(const function_application_exprt &f,axiom_vect & axioms) +{ + assert(f.arguments().size() == 1); + of_char(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); + +} + +string_exprt string_constraint_generatort::of_char +(const exprt &c, axiom_vect & axioms, bool is_c_string) +{ + and_exprt lemma(equal_exprt((*this)[refined_string_typet::index_of_int(0)], c), + equal_exprt(length(), refined_string_typet::index_of_int(1))); + axioms.push_back(lemma); + +} + + +string_exprt string_constraint_generatort::of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string) +{ + typet type = code_point.type(); + binary_relation_exprt small(code_point,ID_lt,constant_of_nat(0x010000,32, type)); + axioms.emplace_back(small, + equal_exprt(length(), refined_string_typet::index_of_int(1))); + axioms.emplace_back(not_exprt(small), + equal_exprt(length(), refined_string_typet::index_of_int(2))); + axioms.emplace_back(small,equal_exprt((*this)[refined_string_typet::index_of_int(0)],typecast_exprt(code_point,refined_string_typet::java_char_type()))); + + axioms.emplace_back(not_exprt(small), + equal_exprt + ((*this)[refined_string_typet::index_of_int(0)], + typecast_exprt + (plus_exprt(constant_of_nat(0xD800,32, type), + div_exprt(minus_exprt(code_point,constant_of_nat(0x010000,32,type)),constant_of_nat(0x0400,32, type))), + refined_string_typet::java_char_type()))); + axioms.emplace_back(not_exprt(small), + equal_exprt + ((*this)[refined_string_typet::index_of_int(1)], + typecast_exprt + (plus_exprt(constant_of_nat(0xDC00,32, type), + mod_exprt(code_point,constant_of_nat(0x0400,32, type))), + refined_string_typet::java_char_type()))); + +} + + +string_exprt string_constraint_generatort::of_string_char_set +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); //bad args to string_char_set? + + string_exprt str = string_of_expr(args[0]); + symbol_exprt c = fresh_symbol("char", refined_string_typet::get_char_type(args[0])); + + axioms.emplace_back(equal_exprt(c,args[2])); + with_exprt sarrnew(str.content(), args[1], c); + implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), + and_exprt(equal_exprt(content(), sarrnew), + equal_exprt(length(), str.length()))); + axioms.push_back(lemma); + +} + +string_exprt string_constraint_generatort::of_string_replace +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt str = string_of_expr(args[0]); + exprt oldChar = args[1]; + exprt newChar = args[2]; + + axioms.emplace_back(equal_exprt(length(), str.length())); + symbol_exprt qvar = string_exprt::fresh_symbol("QA_replace", refined_string_typet::index_type()); + + axioms.push_back + (string_constraintt + (and_exprt + (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt((*this)[qvar],newChar)), + implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), + equal_exprt((*this)[qvar],str[qvar])) + ) + ).forall(qvar,length())); + +} + +string_exprt string_constraint_generatort::of_string_delete_char_at +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 2); + string_exprt str = string_of_expr(args[0]); + exprt index_one = refined_string_typet::index_of_int(1); + of_string_delete(str,args[1],plus_exprt(args[1],index_one),symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_delete +(const string_exprt &str, const exprt & start, const exprt & end) +{ + // We should have these formulas: + // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) + // forall i < |s| (i < index ==> s[i] = str[i] + // && i >= index ==> s[i] = str[i+1]) + // However this may make the index set computation loop because the same + // index appears switched by one. + // It may be better to call two substrings functions + + assert(start.type() == refined_string_typet::index_type()); + assert(end.type() == refined_string_typet::index_type()); + string_exprt str1(refined_string_typet::get_char_type(str)); + string_exprt str2(refined_string_typet::get_char_type(str)); + str1.of_string_substring(str,refined_string_typet::index_zero(),start,symbol_to_string,axioms); + str2.of_string_substring(str,end,str.length(),symbol_to_string,axioms); + of_string_concat(str1,str2,axioms); + +} + +string_exprt string_constraint_generatort::of_string_delete +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 3); + string_exprt str = string_of_expr(args[0]); + of_string_delete(str,args[1],args[2],symbol_to_string,axioms); +} + + +string_exprt string_constraint_generatort::of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + + s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_code_point(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); + of_string_concat(s1,s2,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert(const string_exprt & s1, const string_exprt & s2, + const exprt & offset, + std::map & symbol_to_string, + axiom_vect & axioms) +{ + assert(offset.type() == refined_string_typet::index_type()); + unsignedbv_typet char_type = refined_string_typet::get_char_type(s1); + string_exprt pref(char_type); + string_exprt suf(char_type); + string_exprt concat1(char_type); + pref.of_string_substring(s1,refined_string_typet::index_zero(),offset,symbol_to_string,axioms); + suf.of_string_substring(s1,offset,s1.length(),symbol_to_string,axioms); + concat1.of_string_concat(pref,s2,axioms); + of_string_concat(concat1,suf,axioms); +} + + +string_exprt string_constraint_generatort::of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2 = string_of_expr(args[2],symbol_to_string,axioms); + of_string_insert(s1, s2, args[1],symbol_to_string, axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[2])); + s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[2])); + s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_bool(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_char(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + +string_exprt string_constraint_generatort::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 3); + string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); + string_exprt s2(refined_string_typet::get_char_type(args[0])); + s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); + of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +} + + +#include + +string_exprt string_constraint_generatort::of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ + const function_application_exprt::argumentst &args = f.arguments(); + // warning this is right now only for java: + bool is_c_string = false; + unsignedbv_typet char_type = is_c_string?refined_string_typet::char_type():refined_string_typet::java_char_type(); + size_t char_width = is_c_string?STRING_SOLVER_CHAR_WIDTH:JAVA_STRING_SOLVER_CHAR_WIDTH; + + if(args.size() == 2) + { + + // Warning: this is not very clean: + irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); + std::string format_string = id2string(literal); + std::cout << "string_exprt::of_string_format " << format_string << std::endl; + size_t position = format_string.find_first_of('%'); + std::vector strings; + int arg_counter = 0; + + string_exprt begin(char_type); + begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); + strings.push_back(begin); + //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; + //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; + + while(position != std::string::npos) + { + switch(format_string[position+1]) { + case 'd' : + { + string_exprt str(char_type); + index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); + typecast_exprt arg_int(arg_object, signedbv_typet(32)); + symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); + axioms.push_back(equal_exprt(arg_int,var_arg_int)); + axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); + str.of_int(var_arg_int,axioms,is_c_string,10); + + strings.push_back(str); + std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; + break; + } + + default: + { + std::cout << "warning: unknown string format: " << format_string << std::endl; + break; + } + } + size_t new_position = format_string.find_first_of('%',position+2); + if(new_position != std::string::npos) { + string_exprt str(char_type); + str.of_string_constant(format_string.substr(position+2,new_position),char_width,char_type,axioms); + strings.push_back(str); + } + position = new_position; + } + + + string_exprt * concatenation = &strings[0]; + int i; + for(i = 1; i < strings.size() - 1; i++) + { + string_exprt str(refined_string_typet::java_char_type()); + str.of_string_concat(*concatenation,strings[i],axioms); + concatenation = &str; + } + + of_string_concat(*concatenation,strings[i],axioms); + } + +} diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h new file mode 100644 index 00000000000..616ae674fb5 --- /dev/null +++ b/src/solvers/refinement/string_constraint_generator.h @@ -0,0 +1,148 @@ +/** -*- C++ -*- *****************************************************\ + +Module: Constraint generation from string function calls + for the PASS algorithm (see the PASS paper at HVC'13) + +Author: Romain Brenguier, romain.brenguier@diffblue.com + +\*******************************************************************/ + +#ifndef CPROVER_SOLVER_STRING_CONSTRAINT_GENERATOR_H +#define CPROVER_SOLVER_STRING_CONSTRAINT_GENERATOR_H + +#include + +class string_constraint_generatort { +public: + + string_constraint_generatort() : language(UNKNOWN){ } + + constant_exprt constant_char(int i); + inline unsignedbv_typet get_char_type() + { + return (language==UNKNOWN?refined_string_typet::char_type():refined_string_typet::java_char_type()); + } + + string_exprt string_of_expr(const exprt & expr); + string_exprt of_function_application(const function_application_exprt &expr); + string_exprt of_string_literal(const function_application_exprt &f,axiom_vect &axioms); + string_exprt of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms); + string_exprt of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + + // insert s2 in s1 at the given position + string_exprt of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); + string_exprt of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + + string_exprt of_string_substring(const string_exprt & str, const exprt & start, const exprt & end); + string_exprt of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_delete (const string_exprt &str, const exprt & start, const exprt & end); + string_exprt of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt of_string_replace(const function_application_exprt &f); + + // Warning: not working correctly at the moment + string_exprt of_string_value_of(const function_application_exprt &f, axiom_vect &axioms); + string_exprt of_string_set_length(const function_application_exprt &f); + string_exprt of_string_copy(const function_application_exprt &f); + string_exprt of_string_format(const function_application_exprt &f); + + string_exprt of_empty_string(const function_application_exprt &f, axiom_vect & axioms); + + string_exprt of_int(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); + string_exprt of_int_hex(const exprt &i, axiom_vect & axioms, bool is_c_string); + string_exprt of_int_hex(const function_application_exprt &f,axiom_vect & axioms); + string_exprt of_long(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); + string_exprt of_bool(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); + string_exprt of_char(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); + + // Warning: the specifications of these functions is only partial: + string_exprt of_float(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); + string_exprt of_double(const function_application_exprt &f, axiom_vect & axioms); + + string_exprt of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); + string_exprt of_java_char_array(const exprt & char_array, axiom_vect & axioms); + + string_exprt of_if(const if_exprt &expr); + + // The following functions convert different string functions + // and add the corresponding lemmas to a list of properties to be checked + exprt convert_string_equal(const function_application_exprt &f); + exprt convert_string_equals_ignore_case(const function_application_exprt &f); + exprt convert_string_is_empty(const function_application_exprt &f); + bvt convert_string_length(const function_application_exprt &f); + exprt convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); + bvt convert_string_contains(const function_application_exprt &f); + exprt convert_string_hash_code(const function_application_exprt &f); + exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt convert_string_index_of(const function_application_exprt &f); + exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt convert_string_last_index_of(const function_application_exprt &f); + bvt convert_char_literal(const function_application_exprt &f); + bvt convert_string_char_at(const function_application_exprt &f); + exprt convert_string_code_point_at(const function_application_exprt &f); + exprt convert_string_code_point_before(const function_application_exprt &f); + + // Warning: this function is underspecified + exprt convert_string_code_point_count(const function_application_exprt &f); + // Warning: this function is underspecified + exprt convert_string_offset_by_code_point(const function_application_exprt &f); + exprt convert_string_parse_int(const function_application_exprt &f); + exprt convert_string_to_char_array(const function_application_exprt &f); + + exprt convert_string_compare_to(const function_application_exprt &f); + + // Warning: this does not work at the moment because of the way we treat string pointers + symbol_exprt convert_string_intern(const function_application_exprt &f); + + +private: + + enum {C, JAVA, UNKNOWN} language; + + // Check that the given string is from the right language + void check_char_type(const exprt & str); + + std::vector axioms; + // Boolean symbols that are used to know whether the results + // of some functions should be true. + std::vector boolean_symbols; + + // Symbols used in existential quantifications + std::vector index_symbols; + + std::map symbol_to_string; + inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ + symbol_to_string[sym.get_identifier()]= expr; + } + + string_exprt string_of_symbol(const symbol_exprt & sym); + +}; + +#endif diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 24a883e0b8a..105b26d4ee2 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -9,7 +9,6 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -#include #include #include @@ -39,1172 +38,3 @@ string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(refined_st } -void string_exprt::of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); - string_exprt t = of_expr(expr.true_case(),symbol_to_string,axioms); - assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); - string_exprt f = of_expr(expr.false_case(),symbol_to_string,axioms); - - axioms.emplace_back(expr.cond(),equal_exprt(length(),t.length())); - symbol_exprt qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); - axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,index_zero,t.length())); - - axioms.emplace_back(not_exprt(expr.cond()),equal_exprt(length(),f.length())); - symbol_exprt qvar2 = fresh_symbol("string_if_false",refined_string_typet::index_type()); - axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])).forall(qvar2,index_zero,f.length())); -} - - -string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { - if(refined_string_typet::is_c_string_type(sym.type())) { - irep_idt id = sym.get_identifier(); - std::map::iterator f = symbol_to_string.find(id); - if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(refined_string_typet::char_type()); - return symbol_to_string[id]; - } else return f->second; - } else { // otherwise we assume it is a java string - irep_idt id = sym.get_identifier(); - std::map::iterator f = symbol_to_string.find(id); - if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(refined_string_typet::java_char_type()); - return symbol_to_string[id]; - } else return f->second; - } - -} - -string_exprt string_exprt::of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms) -{ - unsignedbv_typet char_type; - - if(refined_string_typet::is_c_string_type(unrefined_string.type())) - char_type = refined_string_typet::char_type(); - else - char_type = refined_string_typet::java_char_type(); - - string_exprt s(char_type); - - if(unrefined_string.id()==ID_function_application) - s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); - else if(unrefined_string.id()==ID_symbol) - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); - else if(unrefined_string.id()==ID_address_of) { - assert(unrefined_string.op0().id()==ID_symbol); - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); - } - else if(unrefined_string.id()==ID_if) - s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); - else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { - // We ignore non deterministic symbols and struct - } - else - throw ("string_exprt of:\n" + unrefined_string.pretty() - + "\nwhich is not a function application, a symbol or an if expression"); - - axioms.emplace_back(s >= index_zero); - return s; -} - -void string_exprt::of_function_application(const function_application_exprt & expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const exprt &name = expr.function(); - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - if(starts_with(id,cprover_string_literal_func)) - return of_string_literal(expr,axioms); - else if(starts_with(id,cprover_string_concat_func)) - return of_string_concat(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_int_func)) - return of_string_concat_int(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_long_func)) - return of_string_concat_long(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_bool_func)) - return of_string_concat_bool(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_char_func)) - return of_string_concat_char(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_double_func)) - return of_string_concat_double(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_float_func)) - return of_string_concat_float(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_concat_code_point_func)) - return of_string_concat_code_point(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_func)) - return of_string_insert(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_int_func)) - return of_string_insert_int(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_long_func)) - return of_string_insert_long(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_bool_func)) - return of_string_insert_bool(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_char_func)) - return of_string_insert_char(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_double_func)) - return of_string_insert_double(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_insert_float_func)) - return of_string_insert_float(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_substring_func)) - return of_string_substring(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_trim_func)) - return of_string_trim(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_to_lower_case_func)) - return of_string_to_lower_case(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_to_upper_case_func)) - return of_string_to_upper_case(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_char_set_func)) - return of_string_char_set(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_value_of_func)) - return of_string_value_of(expr,axioms); - else if(starts_with(id,cprover_string_empty_string_func)) - return of_empty_string(expr,axioms); - else if(starts_with(id,cprover_string_copy_func)) - return of_string_copy(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_of_int_func)) - return of_int(expr,axioms); - else if(starts_with(id,cprover_string_of_int_hex_func)) - return of_int_hex(expr,axioms); - else if(starts_with(id,cprover_string_of_float_func)) - return of_float(expr,axioms); - else if(starts_with(id,cprover_string_of_double_func)) - return of_double(expr,axioms); - else if(starts_with(id,cprover_string_of_long_func)) - return of_long(expr,axioms); - else if(starts_with(id,cprover_string_of_bool_func)) - return of_bool(expr,axioms); - else if(starts_with(id,cprover_string_of_char_func)) - return of_char(expr,axioms); - else if(starts_with(id,cprover_string_set_length_func)) - return of_string_set_length(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_delete_func)) - return of_string_delete(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_delete_char_at_func)) - return of_string_delete_char_at(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_replace_func)) - return of_string_replace(expr,symbol_to_string,axioms); - else if(starts_with(id,cprover_string_format_func)) - return of_string_format(expr,symbol_to_string,axioms); - else { - std::string msg("string_exprt::of_function_application: unknown symbol :"); - msg+=id.c_str(); - throw msg; - } - } - throw "string_exprt::of_function_application: not a string function"; -} - -irep_idt string_exprt::extract_java_string(const symbol_exprt & s){ - std::string tmp(s.get(ID_identifier).c_str()); - std::string value = tmp.substr(31); - return irep_idt(value); -} - -void string_exprt::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ - - std::string str = sval.c_str(); - // should only do this for java - std::wstring utf16 = utf8_to_utf16(str); - // warning: endianness should be used as a flag when using this function - - for (std::size_t i = 0; i < utf16.size(); ++i) { - std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); - constant_exprt idx(idx_binary, refined_string_typet::index_type()); - // warning: this should disappear if utf8_to_utf16 takes into account endianness - wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); - - std::string sval_binary=integer2binary((unsigned)big_endian, char_width); - constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content(), idx), c); - axioms.emplace_back(lemma,true); - } - - std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); - - axioms.emplace_back(equal_exprt(length(),s_length)); -} - -void string_exprt::of_empty_string(const function_application_exprt &f, axiom_vect & axioms) -{ - assert(f.arguments().size() == 0); - axioms.emplace_back(equal_exprt(length(),index_zero)); -} - -void string_exprt::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); //bad args to string literal? - const exprt &arg = args[0]; - - irep_idt sval; - int char_width; - unsignedbv_typet char_type; - - if (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) { - // C string constant - - const exprt &s = arg.op0().op0().op0(); - sval = to_string_constant(s).get_value(); - char_width = STRING_SOLVER_CHAR_WIDTH; - char_type = refined_string_typet::char_type(); - - } else { - // Java string constant - assert (arg.operands().size() == 1); - assert(refined_string_typet::is_unrefined_string_type(arg.type())); - const exprt &s = arg.op0(); - - //it seems the value of the string is lost, we need to recover it from the identifier - sval = extract_java_string(to_symbol_expr(s)); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - char_type = refined_string_typet::java_char_type(); - } - - of_string_constant(sval,char_width,char_type,axioms); -} - - -void string_exprt::of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms) { - equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); - axioms.emplace_back(length_sum_lem); - - symbol_exprt idx = fresh_symbol("QA_index_concat",refined_string_typet::index_type()); - - string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); - axioms.push_back(a1.forall(idx, index_zero, s1.length())); - - - symbol_exprt idx2 = fresh_symbol("QA_index_concat2",refined_string_typet::index_type()); - - string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); - axioms.push_back(a2.forall(idx2, index_zero, s2.length())); -} - -void string_exprt::of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string concat - - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2 = string_exprt::of_expr(args[1],symbol_to_string,axioms); - - of_string_concat(s1, s2, axioms); -} - - - -void string_exprt::of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - axioms.emplace_back(equal_exprt(length(), s1.length())); - symbol_exprt idx = fresh_symbol("QA_index_copy",refined_string_typet::index_type()); - string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); - axioms.push_back(a1.forall(idx, index_zero, s1.length())); -} - -void string_exprt::of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - - bool is_c_string = refined_string_typet::is_c_string_type(f.type()); - exprt null_char; - if(is_c_string) - null_char = constant_of_nat(0,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - else - null_char = constant_of_nat(0,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - - // |s| = k - // && forall i < |s|. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) - - axioms.emplace_back(equal_exprt(length(), args[1])); - symbol_exprt idx = fresh_symbol("QA_index_set_length",refined_string_typet::index_type()); - - - string_constraintt a1 - (and_exprt(implies_exprt(s1 > idx, equal_exprt(s1[idx],(*this)[idx])), - implies_exprt(s1 <= idx, equal_exprt(s1[idx],null_char)))); - axioms.push_back(a1.forall(idx, index_zero, (*this).length())); -} - - - -void string_exprt::of_java_char_array(const exprt & char_array, axiom_vect & axioms) -{ - exprt arr = to_address_of_expr(char_array).object(); - exprt len = member_exprt(arr, "length",length().type()); - exprt cont = member_exprt(arr, "data",content().type()); - op0() = len; - op1() = cont; -} - - -void string_exprt::of_string_value_of(const function_application_exprt &f, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - if(args.size() == 3) - { - exprt char_array = args[0]; - exprt offset = args[1]; - exprt count = args[2]; - string_exprt str(refined_string_typet::java_char_type()); - str.of_java_char_array(args[0],axioms); - axioms.emplace_back(equal_exprt(length(), count)); - - symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); - string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); - axioms.push_back(a1.forall(idx, index_zero, count)); - } - else - { - assert(args.size() == 1); - of_java_char_array(args[0],axioms); - } -} - -void string_exprt::of_string_substring -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() >= 2); - - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - - exprt i(args[1]); - - exprt j; - if(args.size() == 3) j = args[2]; - else j = str.length(); - - of_string_substring(str,i,j,symbol_to_string,axioms); -} - -void string_exprt::of_string_substring - (const string_exprt & str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms) -{ - symbol_exprt idx = fresh_symbol("index_substring", refined_string_typet::index_type()); - assert(start.type() == refined_string_typet::index_type()); - assert(end.type() == refined_string_typet::index_type()); - - axioms.emplace_back(equal_exprt(length(), minus_exprt(end, start))); - axioms.emplace_back(binary_relation_exprt(start, ID_lt, end)); - axioms.emplace_back(str >= end); - - // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(start, idx)])); - - axioms.push_back(a.forall(idx,index_zero,length())); -} - -void string_exprt::of_string_trim -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - symbol_exprt idx = fresh_symbol("index_trim", refined_string_typet::index_type()); - - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt space_char; - if(is_c_string) - space_char = constant_of_nat(32,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - else - space_char = constant_of_nat(32,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - - // m + |s1| <= |str| - axioms.emplace_back(str >= plus_exprt(idx, length())); - axioms.emplace_back(binary_relation_exprt(idx, ID_ge, index_zero)); - axioms.emplace_back(str >= idx); - axioms.emplace_back(str >= length()); - ///axioms.emplace_back(binary_relation_exprt(length(), ID_gt, index_zero)); - - symbol_exprt n = fresh_symbol("QA_index_trim",refined_string_typet::index_type()); - // forall n < m, str[n] = ' ' - string_constraintt a(equal_exprt(str[n], space_char)); - axioms.push_back(a.forall(n,index_zero,idx)); - - symbol_exprt n2 = fresh_symbol("QA_index_trim2",refined_string_typet::index_type()); - // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' - string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); - axioms.push_back(a1.forall(n2,index_zero,minus_exprt(str.length(),plus_exprt(idx,length())))); - - symbol_exprt n3 = fresh_symbol("QA_index_trim3",refined_string_typet::index_type()); - // forall n < |s1|, s[idx+n] = s1[n] - string_constraintt a2(equal_exprt((*this)[n3], str[plus_exprt(n3, idx)])); - axioms.push_back(a2.forall(n3,index_zero,length())); - // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| - or_exprt m_index_condition(equal_exprt(idx,str.length()), - and_exprt - (not_exprt(equal_exprt(str[idx],space_char)), - not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char)))); - axioms.push_back(m_index_condition); -} - -void string_exprt::of_string_to_lower_case -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt char_a; - exprt char_A; - exprt char_z; - exprt char_Z; - if(is_c_string) { - char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - } else { - char_a = constant_of_nat(97,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_A = constant_of_nat(65,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_z = constant_of_nat(122,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_Z = constant_of_nat(90,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - } - - axioms.emplace_back(equal_exprt(length(), str.length())); - - symbol_exprt idx = fresh_symbol("QA_lower_case",refined_string_typet::index_type()); - // forall idx < str.length, this[idx] = 'A'<=str[idx]<='Z' ? str[idx]+'a'-'A' : str[idx] - exprt is_upper_case = and_exprt(binary_relation_exprt(char_A,ID_le,str[idx]), - binary_relation_exprt(str[idx],ID_le,char_Z)); - equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); - equal_exprt eq((*this)[idx], str[idx]); - string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); - axioms.push_back(a.forall(idx,index_zero,length())); -} - - -void string_exprt::of_string_to_upper_case -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt char_a; - exprt char_A; - exprt char_z; - exprt char_Z; - - if(is_c_string) { - char_a = constant_of_nat(97,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_A = constant_of_nat(65,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_z = constant_of_nat(122,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - char_Z = constant_of_nat(90,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - } else { - char_a = constant_of_nat(97,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_A = constant_of_nat(65,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_z = constant_of_nat(122,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - char_Z = constant_of_nat(90,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - } - - axioms.emplace_back(equal_exprt(length(), str.length())); - - symbol_exprt idx = fresh_symbol("QA_upper_case",refined_string_typet::index_type()); - // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] - exprt is_lower_case = and_exprt(binary_relation_exprt(char_a,ID_le,str[idx]), - binary_relation_exprt(str[idx],ID_le,char_z)); - equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); - equal_exprt eq((*this)[idx], str[idx]); - string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); - axioms.push_back(a.forall(idx,index_zero,length())); -} - - -void string_exprt::of_int -(const function_application_exprt &expr,axiom_vect & axioms) -{ - assert(expr.arguments().size() == 1); - of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),10); -} - -void string_exprt::of_long -(const function_application_exprt &expr,axiom_vect & axioms) -{ - assert(expr.arguments().size() == 1); - of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),30); -} - - -void string_exprt::of_float -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),false); -} - -void string_exprt::of_float -(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision) -{ - // Warning: we currently only have partial specification - unsignedbv_typet char_type; - int char_width; - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } - - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(24))); - - - string_exprt magnitude(char_type); - string_exprt sign_string(char_type); - - // If the argument is NaN, the result is the string "NaN". - string_exprt nan_string(char_type); - nan_string.of_string_constant("NaN",char_width,char_type,axioms); - - ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); - - exprt isnan = float_bvt().isnan(f,fspec); - axioms.emplace_back(isnan, equal_exprt(magnitude.length(),nan_string.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_nan", refined_string_typet::index_type()); - axioms.push_back - (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) - ).forall(qvar,index_zero,nan_string.length())); - - // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. - - const bitvector_typet &bv_type=to_bitvector_type(f.type()); - unsigned width=bv_type.get_width(); - exprt isneg = extractbit_exprt(f, width-1); - - axioms.emplace_back(isneg, equal_exprt(sign_string.length(),refined_string_typet::index_of_int(1))); - - axioms.emplace_back(not_exprt(isneg), equal_exprt(sign_string.length(),refined_string_typet::index_of_int(0))); - axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_of_nat(0x2D,char_width,char_type))); - - - // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". - - string_exprt infinity_string(char_type); - infinity_string.of_string_constant("Infinity",char_width,char_type,axioms); - exprt isinf = float_bvt().isinf(f,fspec); - axioms.emplace_back(isinf, equal_exprt(magnitude.length(),infinity_string.length())); - symbol_exprt qvar_inf = string_exprt::fresh_symbol("qvar_equal_infinity", refined_string_typet::index_type()); - axioms.push_back - (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) - ).forall(qvar_inf,index_zero,infinity_string.length())); - - //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". - - string_exprt zero_string(char_type); - zero_string.of_string_constant("0.0",char_width,char_type,axioms); - exprt iszero = float_bvt().is_zero(f,fspec); - axioms.emplace_back(iszero, equal_exprt(magnitude.length(),zero_string.length())); - symbol_exprt qvar_zero = string_exprt::fresh_symbol("qvar_equal_zero", refined_string_typet::index_type()); - axioms.push_back - (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) - ).forall(qvar_zero,index_zero,zero_string.length())); - - - /* - ieee_floatt milli(fspec); - milli.from_float(0.001); - ieee_floatt decamega(fspec); - decamega.from_float(1e7); - exprt scientific = or_exprt - (float_bvt().relation(f,float_bvt().LT,milli.to_expr(),fspec), - float_bvt().relation(f,float_bvt().GE,decamega.to_expr(),fspec)); - */ - - // If m is greater than or equal to 10^-3 but less than 10^7, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. - - //string_exprt integer_part(char_type); - //exprt integer = float_bvt().to_integer(float_bvt.abs(f,fspec),32,true,fspec); - - //integer_part.of_int(integer); - //string_exprt dot_string(char_type); - //dot_string.of_string_constant(".",char_width,char_type,axioms); - - //string_exprt fractional_part(char_type); - - /* Here is the remainder of the specification of Float.toString, for the magnitude m : - - If m is less than 10^-3 or greater than or equal to 10^7, then it is represented in so-called "computerized scientific notation." Let n be the unique integer such that 10n ≤ m < 10n+1; then let a be the mathematically exact quotient of m and 10n so that 1 ≤ a < 10. The magnitude is then represented as the integer part of a, as a single decimal digit, followed by '.' ('\u002E'), followed by decimal digits representing the fractional part of a, followed by the letter 'E' ('\u0045'), followed by a representation of n as a decimal integer, as produced by the method Integer.toString(int). - - How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ - - of_string_concat(sign_string,magnitude,axioms); - - - /* - exprt char_0 = constant_of_nat(48,char_width,char_type); - exprt char_9 = constant_of_nat(57,char_width,char_type); - exprt char_dot = constant_of_nat(46,char_width,char_type); - - symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); - exprt c = (*this)[idx]; - exprt is_digit = - or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), - binary_relation_exprt(c,ID_le,char_9)), - equal_exprt(c,char_dot) - ); - string_constraintt a(is_digit);*/ - //axioms.push_back(a.forall(idx,index_zero,length())); - - -} - -void string_exprt::of_double -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),true); -} - - -void string_exprt::of_bool -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_bool(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); - -} - -void string_exprt::of_bool -(const exprt &i,axiom_vect & axioms,bool is_c_string) -{ - unsignedbv_typet char_type; - int char_width; - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } - - assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); - - typecast_exprt eq(i,bool_typet()); - - string_exprt true_string(char_type); - string_exprt false_string(char_type); - true_string.of_string_constant("true",char_width,char_type,axioms); - false_string.of_string_constant("false",char_width,char_type,axioms); - - axioms.emplace_back(eq, equal_exprt(length(),true_string.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_true", refined_string_typet::index_type()); - axioms.push_back - (string_constraintt(eq,equal_exprt((*this)[qvar],true_string[qvar]) - ).forall(qvar,index_zero,true_string.length())); - - axioms.emplace_back(not_exprt(eq), equal_exprt(length(),false_string.length())); - symbol_exprt qvar1 = string_exprt::fresh_symbol("qvar_equal_false", refined_string_typet::index_type()); - axioms.push_back - (string_constraintt(not_exprt(eq),equal_exprt((*this)[qvar1],false_string[qvar1]) - ).forall(qvar,index_zero,false_string.length())); - - - -} - - -void string_exprt::of_int -(const exprt &i,axiom_vect & axioms,bool is_c_string, int max_size) -{ - typet type = i.type(); - int width = type.get_unsigned_int(ID_width); - exprt ten = constant_of_nat(10,width,type); - exprt zero_char; - exprt nine_char; - exprt minus_char; - - if(is_c_string) { - minus_char = constant_of_nat(45,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - zero_char = constant_of_nat(48,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - nine_char = constant_of_nat(57,STRING_SOLVER_CHAR_WIDTH,refined_string_typet::char_type()); - } else { - minus_char = constant_of_nat(45,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - zero_char = constant_of_nat(48,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - nine_char = constant_of_nat(57,JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - } - - axioms.emplace_back(and_exprt(*this > index_zero,*this <= refined_string_typet::index_of_int(max_size))); - - exprt chr = (*this)[refined_string_typet::index_of_int(0)]; - exprt starts_with_minus = equal_exprt(chr,minus_char); - exprt starts_with_digit = and_exprt - (binary_relation_exprt(chr,ID_ge,zero_char), - binary_relation_exprt(chr,ID_le,nine_char)); - axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); - - for(int size=1; size<=max_size;size++) { - exprt sum = constant_of_nat(0,width,type); - exprt all_numbers = true_exprt(); - chr = (*this)[refined_string_typet::index_of_int(0)]; - exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(int j=1; j1) { - axioms.emplace_back(and_exprt(premise,starts_with_digit), - not_exprt(equal_exprt((*this)[index_zero],zero_char))); - axioms.emplace_back(and_exprt(premise,starts_with_minus), - not_exprt(equal_exprt((*this)[refined_string_typet::index_of_int(1)],zero_char))); - } - - //we have to be careful when exceeding the maximal size of integers - // Warning this should be different depending on max size - if(size == max_size) { - exprt smallest_with_10_digits = constant_of_nat(1000000000,width,type); - axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); - } - } -} - - -exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { - exprt zero_char = constant_of_nat(48,char_width,char_type); - exprt nine_char = constant_of_nat(57,char_width,char_type); - exprt a_char = constant_of_nat(0x61,char_width,char_type); - return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), - minus_exprt(chr,constant_of_nat(0x61 - 10,char_width,char_type)), - minus_exprt(chr,zero_char)); -} - - -void string_exprt::of_int_hex -(const exprt &i,axiom_vect & axioms,bool is_c_string) -{ - typet type = i.type(); - int width = type.get_unsigned_int(ID_width); - exprt sixteen = constant_of_nat(16,width,type); - typet char_type; - unsigned char_width; - - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } - - exprt minus_char = constant_of_nat(45,char_width,char_type); - exprt zero_char = constant_of_nat(48,char_width,char_type); - exprt nine_char = constant_of_nat(57,char_width,char_type); - exprt a_char = constant_of_nat(0x61,char_width,char_type); - exprt f_char = constant_of_nat(0x66,char_width,char_type); - - int max_size = 8; - axioms.emplace_back(and_exprt(*this > index_zero,*this <= refined_string_typet::index_of_int(max_size))); - - for(int size=1; size<=max_size;size++) { - exprt sum = constant_of_nat(0,width,type); - exprt all_numbers = true_exprt(); - exprt chr = (*this)[refined_string_typet::index_of_int(0)]; - - for(int j=0; j1) { - axioms.emplace_back(premise, - not_exprt(equal_exprt((*this)[index_zero],zero_char))); - } - - } -} - -void string_exprt::of_int_hex -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_int_hex(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); -} - -void string_exprt::of_char -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_char(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); - -} - -void string_exprt::of_char -(const exprt &c, axiom_vect & axioms, bool is_c_string) -{ - and_exprt lemma(equal_exprt((*this)[refined_string_typet::index_of_int(0)], c), - equal_exprt(length(), refined_string_typet::index_of_int(1))); - axioms.push_back(lemma); - -} - - -void string_exprt::of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string) -{ - typet type = code_point.type(); - binary_relation_exprt small(code_point,ID_lt,constant_of_nat(0x010000,32, type)); - axioms.emplace_back(small, - equal_exprt(length(), refined_string_typet::index_of_int(1))); - axioms.emplace_back(not_exprt(small), - equal_exprt(length(), refined_string_typet::index_of_int(2))); - axioms.emplace_back(small,equal_exprt((*this)[refined_string_typet::index_of_int(0)],typecast_exprt(code_point,refined_string_typet::java_char_type()))); - - axioms.emplace_back(not_exprt(small), - equal_exprt - ((*this)[refined_string_typet::index_of_int(0)], - typecast_exprt - (plus_exprt(constant_of_nat(0xD800,32, type), - div_exprt(minus_exprt(code_point,constant_of_nat(0x010000,32,type)),constant_of_nat(0x0400,32, type))), - refined_string_typet::java_char_type()))); - axioms.emplace_back(not_exprt(small), - equal_exprt - ((*this)[refined_string_typet::index_of_int(1)], - typecast_exprt - (plus_exprt(constant_of_nat(0xDC00,32, type), - mod_exprt(code_point,constant_of_nat(0x0400,32, type))), - refined_string_typet::java_char_type()))); - -} - - -void string_exprt::of_string_char_set -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); //bad args to string_char_set? - - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - symbol_exprt c = fresh_symbol("char", refined_string_typet::get_char_type(args[0])); - - axioms.emplace_back(equal_exprt(c,args[2])); - with_exprt sarrnew(str.content(), args[1], c); - implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), - and_exprt(equal_exprt(content(), sarrnew), - equal_exprt(length(), str.length()))); - axioms.push_back(lemma); - -} - -void string_exprt::of_string_replace -(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt oldChar = args[1]; - exprt newChar = args[2]; - - axioms.emplace_back(equal_exprt(length(), str.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("QA_replace", refined_string_typet::index_type()); - - axioms.push_back - (string_constraintt - (and_exprt - (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt((*this)[qvar],newChar)), - implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), - equal_exprt((*this)[qvar],str[qvar])) - ) - ).forall(qvar,index_zero,length())); - -} - -void string_exprt::of_string_delete_char_at -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 2); - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - exprt index_one = refined_string_typet::index_of_int(1); - of_string_delete(str,args[1],plus_exprt(args[1],index_one),symbol_to_string,axioms); -} - -void string_exprt::of_string_delete -(const string_exprt &str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms) -{ - // We should have these formulas: - // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) - // forall i < |s| (i < index ==> s[i] = str[i] - // && i >= index ==> s[i] = str[i+1]) - // However this may make the index set computation loop because the same - // index appears switched by one. - // It may be better to call two substrings functions - - assert(start.type() == refined_string_typet::index_type()); - assert(end.type() == refined_string_typet::index_type()); - string_exprt str1(refined_string_typet::get_char_type(str)); - string_exprt str2(refined_string_typet::get_char_type(str)); - str1.of_string_substring(str,index_zero,start,symbol_to_string,axioms); - str2.of_string_substring(str,end,str.length(),symbol_to_string,axioms); - of_string_concat(str1,str2,axioms); - -} - -void string_exprt::of_string_delete -(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); - string_exprt str = of_expr(args[0],symbol_to_string,axioms); - of_string_delete(str,args[1],args[2],symbol_to_string,axioms); -} - - -void string_exprt::of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_code_point(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); -} - -void string_exprt::of_string_insert(const string_exprt & s1, const string_exprt & s2, - const exprt & offset, - std::map & symbol_to_string, - axiom_vect & axioms) -{ - assert(offset.type() == refined_string_typet::index_type()); - unsignedbv_typet char_type = refined_string_typet::get_char_type(s1); - string_exprt pref(char_type); - string_exprt suf(char_type); - string_exprt concat1(char_type); - pref.of_string_substring(s1,index_zero,offset,symbol_to_string,axioms); - suf.of_string_substring(s1,offset,s1.length(),symbol_to_string,axioms); - concat1.of_string_concat(pref,s2,axioms); - of_string_concat(concat1,suf,axioms); -} - - -void string_exprt::of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2 = string_exprt::of_expr(args[2],symbol_to_string,axioms); - of_string_insert(s1, s2, args[1],symbol_to_string, axioms); -} - -void string_exprt::of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[2])); - s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -void string_exprt::of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[2])); - s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -void string_exprt::of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_bool(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -void string_exprt::of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_char(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -void string_exprt::of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -void string_exprt::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_exprt::of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - - -#include - -void string_exprt::of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - // warning this is right now only for java: - bool is_c_string = false; - unsignedbv_typet char_type = is_c_string?refined_string_typet::char_type():refined_string_typet::java_char_type(); - size_t char_width = is_c_string?STRING_SOLVER_CHAR_WIDTH:JAVA_STRING_SOLVER_CHAR_WIDTH; - - if(args.size() == 2) - { - - // Warning: this is not very clean: - irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); - std::string format_string = id2string(literal); - std::cout << "string_exprt::of_string_format " << format_string << std::endl; - size_t position = format_string.find_first_of('%'); - std::vector strings; - int arg_counter = 0; - - string_exprt begin(char_type); - begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); - strings.push_back(begin); - //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; - //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; - - while(position != std::string::npos) - { - switch(format_string[position+1]) { - case 'd' : - { - string_exprt str(char_type); - index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); - typecast_exprt arg_int(arg_object, signedbv_typet(32)); - symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); - axioms.push_back(equal_exprt(arg_int,var_arg_int)); - axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); - str.of_int(var_arg_int,axioms,is_c_string,10); - - strings.push_back(str); - std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; - break; - } - - default: - { - std::cout << "warning: unknown string format: " << format_string << std::endl; - break; - } - } - size_t new_position = format_string.find_first_of('%',position+2); - if(new_position != std::string::npos) { - string_exprt str(char_type); - str.of_string_constant(format_string.substr(position+2,new_position),char_width,char_type,axioms); - strings.push_back(str); - } - position = new_position; - } - - - string_exprt * concatenation = &strings[0]; - int i; - for(i = 1; i < strings.size() - 1; i++) - { - string_exprt str(refined_string_typet::java_char_type()); - str.of_string_concat(*concatenation,strings[i],axioms); - concatenation = &str; - } - - of_string_concat(*concatenation,strings[i],axioms); - } - -} diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 052469b4d34..6b68c98eb26 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -73,70 +73,6 @@ class string_exprt : public struct_exprt { void of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms); -private: - // Auxiliary functions for of_expr - void of_function_application(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - void of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms); - void of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - - // insert s2 in s1 at the given position - void of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - - void of_string_substring(const string_exprt & str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_delete (const string_exprt &str, const exprt & start, const exprt & end, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - void of_string_replace(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); - - // Warning: not working correctly at the moment - void of_string_value_of(const function_application_exprt &f, axiom_vect &axioms); - void of_string_set_length(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_copy(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); - void of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect & axioms); - - void of_empty_string(const function_application_exprt &f, axiom_vect & axioms); - - void of_int(const function_application_exprt &f, axiom_vect & axioms); - void of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); - void of_int_hex(const exprt &i, axiom_vect & axioms, bool is_c_string); - void of_int_hex(const function_application_exprt &f,axiom_vect & axioms); - void of_long(const function_application_exprt &f, axiom_vect & axioms); - void of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); - void of_bool(const function_application_exprt &f, axiom_vect & axioms); - void of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); - void of_char(const function_application_exprt &f, axiom_vect & axioms); - void of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); - - // Warning: the specifications of these functions is only partial: - void of_float(const function_application_exprt &f, axiom_vect & axioms); - void of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); - void of_double(const function_application_exprt &f, axiom_vect & axioms); - - void of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); - void of_java_char_array(const exprt & char_array, axiom_vect & axioms); - - void of_if(const if_exprt &expr, std::map & symbol_to_string, axiom_vect & axioms); - static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); From 36c3e603546842e0529bf220b1db8941a3d55afa Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 18 Oct 2016 16:59:10 +0100 Subject: [PATCH 150/221] restructuration using a constraint generator --- .../string_constraint_generator.cpp | 896 +++++++++++++- .../refinement/string_constraint_generator.h | 147 +-- src/solvers/refinement/string_refinement.cpp | 1039 ++--------------- src/solvers/refinement/string_refinement.h | 64 +- 4 files changed, 1053 insertions(+), 1093 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 67411319ca9..d98545903b7 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -13,14 +13,14 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com constant_exprt string_constraint_generatort::constant_char(int i) { -switch(language) - { - case C : -return constant_exprt(integer2binary(i,STRING_SOLVER_CHAR_WIDTH),refined_string_typet::char_type()); -break; - case JAVA : return constant_exprt(integer2binary(i,JAVA_STRING_SOLVER_CHAR_WIDTH),refined_string_typet::java_char_type()); -break; - default: assert(false); + switch(language) + { + case C : + return constant_exprt(integer2binary(i,STRING_SOLVER_CHAR_WIDTH),refined_string_typet::char_type()); + break; + case JAVA : return constant_exprt(integer2binary(i,JAVA_STRING_SOLVER_CHAR_WIDTH),refined_string_typet::java_char_type()); + break; + default: assert(false); } } @@ -37,6 +37,22 @@ void string_constraint_generatort::check_char_type(const exprt & str) } +unsignedbv_typet get_char_type() +{ + if(language==C) + return refined_string_typet::char_type(); + else if(language==JAVA) return refined_string_typet::java_char_type(); + else assert(false); +} + +unsignedbv_typet get_char_width() +{ + if(language==C) + return STRING_SOLVER_CHAR_WIDTH; + else if(language==JAVA) return JAVA_STRING_SOLVER_CHAR_WIDTH; + else assert(false); +} + string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) { unsignedbv_typet char_type; @@ -46,24 +62,27 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine else char_type = refined_string_typet::java_char_type(); - string_exprt s(char_type); + string_exprt s; - if(unrefined_string.id()==ID_function_application) - s.of_function_application(to_function_application_expr(unrefined_string), symbol_to_string,axioms); - else if(unrefined_string.id()==ID_symbol) - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); - else if(unrefined_string.id()==ID_address_of) { - assert(unrefined_string.op0().id()==ID_symbol); - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); - } - else if(unrefined_string.id()==ID_if) - s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); - else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { - // We ignore non deterministic symbols and struct - } - else + switch(unrefined_string.id()) + { + case ID_function_application: + s = of_function_application(to_function_application_expr(unrefined_string)); + else if(unrefined_string.id()==ID_symbol) + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); + else if(unrefined_string.id()==ID_address_of) { + assert(unrefined_string.op0().id()==ID_symbol); + s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); + } + else if(unrefined_string.id()==ID_if) + s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); + else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { + // We ignore non deterministic symbols and struct + } + default: throw ("string_exprt of:\n" + unrefined_string.pretty() + "\nwhich is not a function application, a symbol or an if expression"); + } axioms.emplace_back(s >= refined_string_typet::index_zero()); return s; @@ -88,7 +107,7 @@ string_exprt string_constraint_generatort::of_if(const if_exprt &expr) } -string_exprt string_exprt::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { +string_exprt string_constraint_generatort::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { if(refined_string_typet::is_c_string_type(sym.type())) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); @@ -194,6 +213,8 @@ string_exprt string_constraint_generatort::of_function_application(const functio throw "string_exprt::of_function_application: not a string function"; } + + irep_idt string_constraint_generatort::extract_java_string(const symbol_exprt & s){ std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); @@ -1203,3 +1224,830 @@ string_exprt string_constraint_generatort::of_string_format(const function_appli } } + +void string_constraint_generator::make_string(const symbol_exprt & sym, const exprt & str) +{ + //debug() << "string_constraint_generatort::make_string of " << pretty_short(sym) << eom; + //<< " --> " << pretty_short(str) << eom; + if(str.id()==ID_symbol) + assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); + else { + // assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + if (str.id() == ID_function_application && + starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { + symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + assign_to_symbol(sym,s); + } + else + assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); + } + //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; +} + +string_exprt string_constraint_generator::make_string(const exprt & str) +{ + //debug() << "string_constraint_generatort::make_string of " << pretty_short(str) << eom; + if(str.id()==ID_symbol) + return string_of_symbol(to_symbol_expr(str)); + else + if (str.id() == ID_function_application && + starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { + symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + return s; + } + else + return string_exprt::of_expr(str,symbol_to_string,string_axioms); +} + + + +exprt string_constraint_generatort::convert_string_equal(const function_application_exprt &f) { + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt eq = fresh_boolean("equal"); + typecast_exprt tc_eq(eq,f.type()); + + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string equal? + + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); + + // We want to write: + // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) + // We can't do it directly because of the universal quantification inside. + // So we say instead the three following: + // eq => s1.length = s2.length + // forall i < s1.length. eq => s1[i] = s2[i] + // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) + + symbol_exprt witness = fresh_index("witness_unequal"); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); + + string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); + + string_axioms.push_back + (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) + ).forall(qvar,zero,s1.length())); + + string_axioms.emplace_back + (not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); + + return tc_eq; +} + +exprt character_equals_ignore_case(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) { + exprt is_upper_case_1 = and_exprt(binary_relation_exprt(char_A,ID_le,char1), + binary_relation_exprt(char1,ID_le,char_Z)); + exprt is_upper_case_2 = and_exprt(binary_relation_exprt(char_A,ID_le,char2), + binary_relation_exprt(char2,ID_le,char_Z)); + return or_exprt(or_exprt(equal_exprt(char1,char2), + and_exprt(is_upper_case_1, equal_exprt(minus_exprt(plus_exprt(char_a,char1),char_A),char2))), + and_exprt(is_upper_case_2, equal_exprt(minus_exprt(plus_exprt(char_a,char2),char_A),char1))); +} + +exprt string_constraint_generatort::convert_string_equals_ignore_case(const function_application_exprt &f) { + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt eq = fresh_boolean("equal_ignore_case"); + typecast_exprt tc_eq(eq,f.type()); + + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //bad args to string equal? + + bool is_c_string = refined_string_typet::is_c_string_type(f.type()); + exprt char_a; + exprt char_A; + exprt char_Z; + if(is_c_string) { + char_a = constant_of_nat(97,refined_string_typet::char_type()); + char_A = constant_of_nat(65,refined_string_typet::char_type()); + char_Z = constant_of_nat(90,refined_string_typet::char_type()); + } else { + char_a = constant_of_nat(97,refined_string_typet::java_char_type()); + char_A = constant_of_nat(65,refined_string_typet::java_char_type()); + char_Z = constant_of_nat(90,refined_string_typet::java_char_type()); + } + + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); + symbol_exprt witness = fresh_index("witness_unequal_ignore_case"); + symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_ignore_case", index_type); + + string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); + + string_axioms.push_back + (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) + ).forall(qvar,zero,s1.length())); + + string_axioms.emplace_back + (not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,zero,s1.length()))); + + return tc_eq; +} + + +bvt string_constraint_generatort::convert_string_length( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + string_exprt str = make_string(args[0]); + exprt length = str.length(); + return tmp_c_o_n_v_e_r_t_bv(length); +} + +exprt string_constraint_generatort::is_positive(const exprt & x) +{ return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } + + +exprt string_constraint_generatort::convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) +{ + symbol_exprt isprefix = fresh_boolean("isprefix"); + string_axioms.emplace_back(isprefix, str >= plus_exprt(prefix.length(),offset)); + + // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] + symbol_exprt qvar = string_exprt::fresh_symbol("QA_isprefix", index_type); + string_axioms.push_back + (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) + ).forall(qvar,zero,prefix.length())); + + symbol_exprt witness = fresh_index("witness_not_isprefix"); + + or_exprt s0_notpref_s1(not_exprt(str >= plus_exprt(prefix.length(),offset)), + and_exprt + (str >= plus_exprt(prefix.length(),offset), + and_exprt(binary_relation_exprt(witness,ID_ge,zero), + and_exprt(prefix > witness, + notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); + + string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); + return isprefix; +} + +exprt string_constraint_generatort::convert_string_is_prefix +(const function_application_exprt &f, bool swap_arguments) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + string_exprt s0 = make_string(args[swap_arguments?1:0]); + string_exprt s1 = make_string(args[swap_arguments?0:1]); + exprt offset; + + if(args.size() == 2) offset = zero; + else if (args.size() == 3) offset = args[2]; + + return typecast_exprt(convert_string_is_prefix(s0,s1,offset),f.type()); +} + +exprt string_constraint_generatort::convert_string_is_empty +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt is_empty = fresh_boolean("is_empty"); + string_exprt s0 = make_string(args[0]); + string_axioms.emplace_back(implies_exprt(is_empty, equal_exprt(s0.length(),zero))); + string_axioms.emplace_back(implies_exprt(equal_exprt(s0.length(),zero),is_empty)); + return typecast_exprt(is_empty,f.type()); + +} + +bvt string_constraint_generatort::convert_string_is_suffix +(const function_application_exprt &f, bool swap_arguments) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); // bad args to string issuffix? + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt issuffix = fresh_boolean("issuffix"); + typecast_exprt tc_issuffix(issuffix,f.type()); + string_exprt s0 = make_string(args[swap_arguments?1:0]); + string_exprt s1 = make_string(args[swap_arguments?0:1]); + + + // issufix(s1,s0) => s0.length >= s1.length + // && forall witness < s1.length. + // issufix => s1[witness] = s0[witness + s0.length - s1.length] + // && !issuffix => s1.length > s0.length + // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] + + string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); + + symbol_exprt qvar = string_exprt::fresh_symbol("QA_suffix", index_type); + exprt qvar_shifted = plus_exprt(qvar, + minus_exprt(s1.length(), s0.length())); + string_axioms.push_back + (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) + ).forall(qvar,zero,s0.length())); + + symbol_exprt witness = fresh_index("witness_not_suffix"); + + exprt shifted = plus_exprt(witness, + minus_exprt(s1.length(), s0.length())); + + implies_exprt lemma2(not_exprt(issuffix), + and_exprt(is_positive(witness), + or_exprt(s0 > s1, + and_exprt(s0 > witness, + notequal_exprt(s0[witness],s1[shifted]))))); + + string_axioms.emplace_back(lemma2); + + return tmp_c_o_n_v_e_r_t_bv(tc_issuffix); +} + + +bvt string_constraint_generatort::convert_string_contains( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); // bad args to string contains? + assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); + + symbol_exprt contains = fresh_boolean("contains"); + typecast_exprt tc_contains(contains,f.type()); + string_exprt s0 = make_string(args[0]); + string_exprt s1 = make_string(args[1]); + + // contains => s0.length >= s1.length + // && startpos <= s0.length - s1.length + // && forall qvar < s1.length. + // contains => s1[qvar] = s0[startpos + qvar] + // !contains => s1.length > s0.length + // || (forall startpos <= s0.length - s1.length. + // exists witness < s1.length && s1[witness] != s0[witness + startpos] + + string_axioms.emplace_back(implies_exprt(contains, s0 >= s1)); + + symbol_exprt startpos = fresh_index("startpos_contains"); + + string_axioms.emplace_back(//implies_exprt(contains, + and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); + + symbol_exprt qvar = string_exprt::fresh_symbol("QA_contains", index_type); + exprt qvar_shifted = plus_exprt(qvar, startpos); + string_axioms.push_back + (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) + ).forall(qvar,zero,s1.length())); + + // We rewrite the axiom for !contains as: + // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) + // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] + + string_axioms.push_back + (string_constraintt::not_contains + (zero,plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), + and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); + + return tmp_c_o_n_v_e_r_t_bv(tc_contains); +} + + +symbol_exprt string_constraint_generatort::fresh_index(const irep_idt &prefix){ + symbol_exprt i = string_exprt::fresh_symbol(prefix,index_type); + index_symbols.push_back(i); + return i; +} + +symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix){ + symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); + boolean_symbols.push_back(b); + return b; +} + +exprt string_constraint_generatort::convert_string_hash_code(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + string_exprt str = make_string(args[0]); + typet return_type = f.type(); + + // initialisation of the missing pool variable + std::map::iterator it; + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(hash.find(it->second) == hash.end()) + hash[it->second] = string_exprt::fresh_symbol("hash", return_type); + + // for each string s. + // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + + // WARNING: the specification may be incomplete + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { + symbol_exprt i = string_exprt::fresh_symbol("index_hash", refined_string_typet::index_type()); + string_axioms.emplace_back + (or_exprt + (equal_exprt(hash[it->second],hash[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt + (not_exprt(equal_exprt(str[i],it->second[i])), + and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero ))) + )))); + } + + + return hash[str]; +} + +exprt string_constraint_generatort::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ + symbol_exprt index = fresh_index("index_of"); + symbol_exprt contains = fresh_boolean("contains_in_index_of"); + + // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) + // && forall n. from_index <= n < i => s[n] != c + + string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); + + symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); + + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); + + symbol_exprt m = string_exprt::fresh_symbol("QA_index_of",index_type); + + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); + + return index; +} + +exprt string_constraint_generatort::convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +{ + symbol_exprt offset = fresh_index("index_of"); + + symbol_exprt contains = fresh_boolean("contains_substring"); + string_axioms.emplace_back(contains, and_exprt + (str >= plus_exprt(substring.length(),offset), + binary_relation_exprt(offset,ID_ge,from_index))); + string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] + symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); + string_axioms.push_back + (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) + ).forall(qvar,zero,substring.length())); + + + debug() << "string_constraint_generatort::convert_string_index_of_string : warning the stpecification is only partial" << eom; + + return offset; +} + +exprt string_constraint_generatort::convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +{ + symbol_exprt offset = fresh_index("index_of"); + + symbol_exprt contains = fresh_boolean("contains_substring"); + string_axioms.emplace_back(contains, and_exprt + (str >= plus_exprt(substring.length(),offset), + binary_relation_exprt(offset,ID_le,from_index))); + string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] + symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); + string_axioms.push_back + (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) + ).forall(qvar,zero,substring.length())); + + debug() << "string_constraint_generatort::convert_string_last_index_of_string : warning the stpecification is only partial" << eom; + return offset; +} + + +exprt string_constraint_generatort::convert_string_index_of( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(f.type() == index_type); + string_exprt str = make_string(args[0]); + exprt c = args[1]; + exprt from_index; + + if(args.size() == 2) from_index = zero; + else if (args.size() == 3) from_index = args[2]; + else assert(false); + + if(refined_string_typet::is_java_string_type(c.type())){ + string_exprt sub = make_string(c); + return convert_string_index_of_string(str,sub,from_index); + } else { + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + return convert_string_index_of(str,c,from_index); + } + +} + +exprt string_constraint_generatort::convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index) { + symbol_exprt index = fresh_index("last_index_of"); + symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); + + // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) + // && forall n. i <= n <= from_index => s[n] != c + + exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); + string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); + string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); + string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); + + symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); + + symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); + string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,from_index_plus_one)); + + return index; + +} + +exprt string_constraint_generatort::convert_string_last_index_of( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(f.type() == index_type); + string_exprt str = make_string(args[0]); + exprt c = args[1]; + exprt from_index; + + if(args.size() == 2) from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); + else if (args.size() == 3) from_index = args[2]; + else assert(false); + + if(refined_string_typet::is_java_string_type(c.type())){ + string_exprt sub = make_string(c); + return convert_string_last_index_of_string(str,sub,from_index); + } else { + if(!(c.type() == char_type || c.type() == java_char_type)){ + debug() << "warning: argument to string_index_of does not have char type: " + << c.type().pretty() << eom; + c = typecast_exprt(c,java_char_type); + } + return convert_string_last_index_of(str,c,from_index); + } +} + +bvt string_constraint_generatort::convert_char_literal( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); // there should be exactly 1 argument to char literal + + const exprt &arg = args[0]; + // for C programs argument to char literal should be one string constant of size one + if(arg.operands().size() == 1 && + arg.op0().operands().size() == 1 && + arg.op0().op0().operands().size() == 2 && + arg.op0().op0().op0().id() == ID_string_constant) + { + const string_constantt s = to_string_constant(arg.op0().op0().op0()); + irep_idt sval = s.get_value(); + assert(sval.size() == 1); + + std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); + + return tmp_c_o_n_v_e_r_t_bv(constant_exprt(binary, char_type)); + } + else { + throw "convert_char_literal unimplemented"; + } + +} + + +bvt string_constraint_generatort::convert_string_char_at( + const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); //string_char_at expects 2 arguments + string_exprt str = make_string(args[0]); + + if(f.type() == char_type) { + symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); + string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); + return tmp_c_o_n_v_e_r_t_bv(char_sym); + } else { + assert(f.type() == java_char_type); + symbol_exprt char_sym = string_exprt::fresh_symbol("char",java_char_type); + string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); + return tmp_c_o_n_v_e_r_t_bv(char_sym); + } +} + + + +constant_exprt string_constraint_generatort::constant_of_nat(int i,typet t) { + return constant_exprt(integer2binary(i, boolbv_width(t)), t); +} + +exprt string_constraint_generatort::convert_string_parse_int +(const function_application_exprt &expr) +{ + const function_application_exprt::argumentst &args = expr.arguments(); + assert(args.size() == 1); + + string_exprt str = make_string(args[0]); + typet type = expr.type(); + symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); + + exprt zero_char; + exprt minus_char; + exprt plus_char; + if(refined_string_typet::is_c_string_type(args[0].type())) { + plus_char = constant_of_nat(43,refined_string_typet::char_type()); + minus_char = constant_of_nat(45,refined_string_typet::char_type()); + zero_char = constant_of_nat(48,refined_string_typet::char_type()); + } + else { + plus_char = constant_of_nat(43,refined_string_typet::java_char_type()); + minus_char = constant_of_nat(45,refined_string_typet::java_char_type()); + zero_char = constant_of_nat(48,refined_string_typet::java_char_type()); + } + + exprt ten = constant_of_nat(10,type); + + exprt chr = str[refined_string_typet::index_of_int(0)]; + exprt starts_with_minus = equal_exprt(chr,minus_char); + exprt starts_with_plus = equal_exprt(chr,plus_char); + exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); + + for(int size=1; size<=10;size++) { + exprt sum = constant_of_nat(0,type); + exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); + + for(int j=1; j::iterator i = current_index_set.begin(), + end = current_index_set.end(); i != end; ++i) { + const exprt &s = i->first; + debug() << "IS(" << pretty_short(s) << ") == {"; + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) + debug() << pretty_short (*j) << "; "; + debug() << "}" << eom; + + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) { + const exprt &val = *j; + + for (size_t k = 0; k < universal_axioms.size(); ++k) { + assert(universal_axioms[k].is_univ_quant()); + string_constraintt lemma = instantiate(universal_axioms[k], s, val); + assert(lemma.is_simple()); + add_lemma(lemma); + } + } + } +} + +exprt string_constraint_generatort::convert_string_to_char_array +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + + string_exprt str = make_string(args[0]); + debug() << "convert_string_to_char_array returns: " << str.content().pretty() << eom; + return str.content(); +} + + + + + +exprt string_constraint_generatort::convert_string_compare_to(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 2); + + string_exprt s1 = make_string(args[0]); + string_exprt s2 = make_string(args[1]); + typet return_type = f.type(); + symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); + + // In the lexicographic comparison, x is the first point where the two strings differ. + // res == 0 => |s1| = |s2| && forall i < |s1|. s1[i] == s2[i] + // res != 0 => + // (|s1| <= |s2| && exists x < |s1|. res = s1[x] - s2[x] && forall i= |s2| && exists x < |s2|. res = s1[x] - s2[x] && forall i |s2| && res = |s1| - |s2| && forall i<|s2| s1[i]=s2[i]) + + // The second part can be rewriten as: + // exists x. + // res != 0 ==> x> 0 && + // ((|s1| <= |s2| && x < |s1|) || (|s1| >= |s2| && x < |s2|) && res = s1[x] - s2[x] ) + // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| + // && forall i < x. res != 0 => s1[i] = s2[i] + + symbol_exprt i = string_exprt::fresh_symbol("QA_compare_to",index_type); + equal_exprt res_null = equal_exprt(res,constant_of_nat(0,return_type)); + string_axioms.emplace_back(res_null, equal_exprt(s1.length(),s2.length())); + string_axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,zero,s1.length())); + symbol_exprt x = fresh_index("index_compare_to"); + string_axioms.push_back + (implies_exprt + (not_exprt(res_null), + and_exprt + (binary_relation_exprt(x,ID_ge,constant_of_nat(0,return_type)), + or_exprt + (and_exprt + (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), + or_exprt + (and_exprt(s1<=s2,s1 > x), and_exprt(s1>=s2,s2 > x))), + and_exprt + (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), + or_exprt + (and_exprt(s2>s1,equal_exprt(x,s1.length())), and_exprt(s1>s2,equal_exprt(x,s2.length())))))) + )); + + string_axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,zero,x)); + + return res; +} + +symbol_exprt string_constraint_generatort::convert_string_intern(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + assert(args.size() == 1); + string_exprt str = make_string(args[0]); + typet return_type = f.type(); + + + // initialisation of the missing pool variable + std::map::iterator it; + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(pool.find(it->second) == pool.end()) + pool[it->second] = string_exprt::fresh_symbol("pool", return_type); + + // intern(str) = s_0 || s_1 || ... + // for each string s. + // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + + //symbol_exprt intern = string_exprt::fresh_symbol("intern",return_type); + + exprt disj = false_exprt(); + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); + + string_axioms.emplace_back(disj); + + + // WARNING: the specification may be incomplete or incorrect + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + if(it->second != str) { + symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); + string_axioms.emplace_back + (or_exprt + (equal_exprt(pool[it->second],pool[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt(not_exprt(equal_exprt(str[i],it->second[i])), + and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero))) + )))); + } + + + return pool[str]; +} diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 616ae674fb5..2d09e607572 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -18,54 +18,64 @@ class string_constraint_generatort { string_constraint_generatort() : language(UNKNOWN){ } constant_exprt constant_char(int i); - inline unsignedbv_typet get_char_type() - { - return (language==UNKNOWN?refined_string_typet::char_type():refined_string_typet::java_char_type()); - } + unsignedbv_typet get_char_type(); + size_t get_char_width(); + + + // Create a new string expression and add the necessary lemma + // to ensure its equal to the given string expression. + string_exprt make_string(const exprt &str); + + // Same thing but associates the string to the given symbol instead + // of returning it. + void make_string(const symbol_exprt & sym, const exprt &str); string_exprt string_of_expr(const exprt & expr); - string_exprt of_function_application(const function_application_exprt &expr); - string_exprt of_string_literal(const function_application_exprt &f,axiom_vect &axioms); - string_exprt of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms); - string_exprt of_string_concat(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); + string_exprt string_of_symbol(const symbol_exprt & sym); + + + string_exprt function_application(const function_application_exprt &expr); + string_exprt string_literal(const function_application_exprt &f); + string_exprt string_concat(const string_exprt & s1, const string_exprt & s2); + string_exprt string_concat(const function_application_exprt &f); + string_exprt string_concat_int(const function_application_exprt &f); + string_exprt string_concat_long(const function_application_exprt &f); + string_exprt string_concat_bool(const function_application_exprt &f); + string_exprt string_concat_char(const function_application_exprt &f); + string_exprt string_concat_double(const function_application_exprt &f); + string_exprt string_concat_float(const function_application_exprt &f); + string_exprt string_concat_code_point(const function_application_exprt &f); // insert s2 in s1 at the given position - string_exprt of_string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); - string_exprt of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms); - - string_exprt of_string_substring(const string_exprt & str, const exprt & start, const exprt & end); - string_exprt of_string_substring(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_trim(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_to_lower_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_to_upper_case(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_char_set(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_delete (const string_exprt &str, const exprt & start, const exprt & end); - string_exprt of_string_delete(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_delete_char_at(const function_application_exprt &expr, std::map & symbol_to_string, axiom_vect &axioms); - string_exprt of_string_replace(const function_application_exprt &f); + string_exprt string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); + string_exprt string_insert(const function_application_exprt &f); + string_exprt string_insert_int(const function_application_exprt &f); + string_exprt string_insert_long(const function_application_exprt &f); + string_exprt string_insert_bool(const function_application_exprt &f); + string_exprt string_insert_char(const function_application_exprt &f); + string_exprt string_insert_double(const function_application_exprt &f); + string_exprt string_insert_float(const function_application_exprt &f); + + string_exprt string_substring(const string_exprt & str, const exprt & start, const exprt & end); + string_exprt string_substring(const function_application_exprt &expr); + string_exprt string_trim(const function_application_exprt &expr); + string_exprt string_to_lower_case(const function_application_exprt &expr); + string_exprt string_to_upper_case(const function_application_exprt &expr); + string_exprt string_char_set(const function_application_exprt &expr); + string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); + string_exprt string_delete(const function_application_exprt &expr); + string_exprt string_delete_char_at(const function_application_exprt &expr); + string_exprt string_replace(const function_application_exprt &f); // Warning: not working correctly at the moment - string_exprt of_string_value_of(const function_application_exprt &f, axiom_vect &axioms); - string_exprt of_string_set_length(const function_application_exprt &f); - string_exprt of_string_copy(const function_application_exprt &f); - string_exprt of_string_format(const function_application_exprt &f); + string_exprt string_value_of(const function_application_exprt &f, axiom_vect &axioms); + string_exprt string_set_length(const function_application_exprt &f); + string_exprt string_copy(const function_application_exprt &f); + string_exprt string_format(const function_application_exprt &f); - string_exprt of_empty_string(const function_application_exprt &f, axiom_vect & axioms); + string_exprt empty_string(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_int(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_int(const function_application_exprt &f); string_exprt of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); string_exprt of_int_hex(const exprt &i, axiom_vect & axioms, bool is_c_string); string_exprt of_int_hex(const function_application_exprt &f,axiom_vect & axioms); @@ -81,44 +91,44 @@ class string_constraint_generatort { string_exprt of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); string_exprt of_double(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); - string_exprt of_java_char_array(const exprt & char_array, axiom_vect & axioms); + string_exprt code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); + string_exprt java_char_array(const exprt & char_array, axiom_vect & axioms); - string_exprt of_if(const if_exprt &expr); + string_exprt string_if(const if_exprt &expr); // The following functions convert different string functions // and add the corresponding lemmas to a list of properties to be checked - exprt convert_string_equal(const function_application_exprt &f); - exprt convert_string_equals_ignore_case(const function_application_exprt &f); - exprt convert_string_is_empty(const function_application_exprt &f); - bvt convert_string_length(const function_application_exprt &f); - exprt convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); - exprt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); - bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); - bvt convert_string_contains(const function_application_exprt &f); - exprt convert_string_hash_code(const function_application_exprt &f); - exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt convert_string_index_of(const function_application_exprt &f); - exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt convert_string_last_index_of(const function_application_exprt &f); - bvt convert_char_literal(const function_application_exprt &f); - bvt convert_string_char_at(const function_application_exprt &f); - exprt convert_string_code_point_at(const function_application_exprt &f); - exprt convert_string_code_point_before(const function_application_exprt &f); + exprt string_equal(const function_application_exprt &f); + exprt string_equals_ignore_case(const function_application_exprt &f); + exprt string_is_empty(const function_application_exprt &f); + exprt string_length(const function_application_exprt &f); + exprt string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + exprt string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); + exprt string_contains(const function_application_exprt &f); + exprt string_hash_code(const function_application_exprt &f); + exprt string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt string_index_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt string_index_of(const function_application_exprt &f); + exprt string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt string_last_index_of(const function_application_exprt &f); + exprt char_literal(const function_application_exprt &f); + exprt string_char_at(const function_application_exprt &f); + exprt string_code_point_at(const function_application_exprt &f); + exprt string_code_point_before(const function_application_exprt &f); // Warning: this function is underspecified - exprt convert_string_code_point_count(const function_application_exprt &f); + exprt string_code_point_count(const function_application_exprt &f); // Warning: this function is underspecified - exprt convert_string_offset_by_code_point(const function_application_exprt &f); - exprt convert_string_parse_int(const function_application_exprt &f); - exprt convert_string_to_char_array(const function_application_exprt &f); + exprt string_offset_by_code_point(const function_application_exprt &f); + exprt string_parse_int(const function_application_exprt &f); + exprt string_to_char_array(const function_application_exprt &f); - exprt convert_string_compare_to(const function_application_exprt &f); + exprt string_compare_to(const function_application_exprt &f); // Warning: this does not work at the moment because of the way we treat string pointers - symbol_exprt convert_string_intern(const function_application_exprt &f); + symbol_exprt string_intern(const function_application_exprt &f); private: @@ -141,7 +151,6 @@ class string_constraint_generatort { symbol_to_string[sym.get_identifier()]= expr; } - string_exprt string_of_symbol(const symbol_exprt & sym); }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 57ba1840df4..62c1a823bb2 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -18,13 +18,6 @@ Author: Alberto Griggio, alberto.griggio@gmail.com // This is mostly for debugging: #include #include -#include - - -unsignedbv_typet char_type = refined_string_typet::char_type(); -signedbv_typet index_type = refined_string_typet::index_type(); -unsignedbv_typet java_char_type = refined_string_typet::java_char_type(); -constant_exprt zero = refined_string_typet::index_of_int(0); // Succinct version of pretty() std::string string_refinementt::pretty_short(const exprt & expr) { @@ -41,6 +34,7 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): //use_counter_example = true; variable_with_multiple_occurence_in_index = false; initial_loop_bound = 100; + start_time = std::chrono::high_resolution_clock::now(); } void string_refinementt::display_index_set() { @@ -56,15 +50,11 @@ void string_refinementt::display_index_set() { } } - -std::chrono::high_resolution_clock::time_point start_time = std::chrono::high_resolution_clock::now(); - - - literalt string_refinementt::convert_rest(const exprt &expr) { if(expr.id()==ID_function_application) { + assert(false); // can this occur? bvt bv = convert_function_application(to_function_application_expr(expr)); assert(bv.size() == 1); return bv[0]; @@ -79,12 +69,14 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) { if(expr.id()==ID_function_application) { + assert(false); // can this occur? bvt bv = convert_function_application(to_function_application_expr(expr)); return bv; } else { if(expr.id()==ID_typecast) { + assert(false); // can this occur? if(expr.operands().size()!=1) throw "typecast takes one operand"; @@ -107,45 +99,105 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) } } -void string_refinementt::make_string(const symbol_exprt & sym, const exprt & str) +bvt string_refinementt::convert_symbol(const exprt &expr) { - debug() << "string_refinementt::make_string of " << pretty_short(sym) << eom; - //<< " --> " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); - else { - // assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - if (str.id() == ID_function_application && - starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { - symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - assign_to_symbol(sym,s); - } - else - assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - } - //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; + const typet &type = expr.type(); + const irep_idt &identifier = expr.get(ID_identifier); + assert(!identifier.empty()); + + if (refined_string_typet::is_unrefined_string_type(type)) + { + string_exprt str = generator.string_of_symbol(to_symbol_expr(expr)); + bvt bv = convert_bv(str); + return bv; + } + else if (expr.type() == generator.get_char_type()) + { + bvt bv; + bv.resize(generator.get_char_width()); + map.get_literals(identifier, generator.get_char_type(), generator.get_char_width(), bv); + + forall_literals(it, bv) + if(it->var_no()>=prop.no_variables() && !it->is_constant()) + { + error() << identifier << eom; + assert(false); + } + return bv; + } + else return SUB::convert_symbol(expr); } -string_exprt string_refinementt::make_string(const exprt & str) + +bvt string_refinementt::convert_function_application( + const function_application_exprt &expr) { - debug() << "string_refinementt::make_string of " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - return string_of_symbol(to_symbol_expr(str)); - else - if (str.id() == ID_function_application && - starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { - symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - return s; + const exprt &name = expr.function(); + debug() << "string_refinementt::convert_function_application" << eom; + + if (name.id() == ID_symbol) { + const irep_idt &id = to_symbol_expr(name).get_identifier(); + debug() << "string_refinementt::convert_function_application(" + << id << ")" << eom; + + if (starts_with(id,cprover_string_literal_func) + || starts_with(id,cprover_string_concat_func) + || starts_with(id,cprover_string_substring_func) + || starts_with(id,cprover_string_char_set_func)) { + string_exprt str = generator.make_string(expr); + bvt bv = string_constraint_generatort::bv(str); + return bv; + } else if (starts_with(id,cprover_char_literal_func)) { + return string_constraint_generatort::char_literal(expr); + } else if (starts_with(id,cprover_string_length_func)) { + return string_constraint_generatort::string_length(expr); + } else if (starts_with(id,cprover_string_equal_func)) { + return convert_bv(string_constraint_generatort::string_equal(expr)); + } else if (starts_with(id,cprover_string_equals_ignore_case_func)) { + return convert_bv(string_constraint_generatort::string_equals_ignore_case(expr)); + } else if (starts_with(id,cprover_string_is_empty_func)) { + return convert_bv(string_constraint_generatort::string_is_empty(expr)); + } else if (starts_with(id,cprover_string_char_at_func)) { + return string_constraint_generatort::string_char_at(expr); + } else if (starts_with(id,cprover_string_is_prefix_func)) { + return convert_bv(string_constraint_generatort::string_is_prefix(expr)); + } else if (starts_with(id,cprover_string_is_suffix_func)) { + return string_constraint_generatort::string_is_suffix(expr); + } else if (starts_with(id,cprover_string_startswith_func)) { + return convert_bv(string_constraint_generatort::string_is_prefix(expr,true)); + } else if (starts_with(id,cprover_string_endswith_func)) { + return string_constraint_generatort::string_is_suffix(expr,true); + } else if (starts_with(id,cprover_string_contains_func)) { + return string_constraint_generatort::string_contains(expr); + } else if (starts_with(id,cprover_string_hash_code_func)) { + return convert_bv(string_constraint_generatort::string_hash_code(expr)); + } else if (starts_with(id,cprover_string_index_of_func)) { + return convert_bv(string_constraint_generatort::string_index_of(expr)); + } else if (starts_with(id,cprover_string_last_index_of_func)) { + return convert_bv(string_constraint_generatort::string_last_index_of(expr)); + } else if (starts_with(id,cprover_string_parse_int_func)) { + return convert_bv(string_constraint_generatort::string_parse_int(expr)); + } else if (starts_with(id,cprover_string_to_char_array_func)) { + return convert_bv(string_constraint_generatort::string_to_char_array(expr)); + } else if (starts_with(id,cprover_string_code_point_at_func)) { + return convert_bv(string_constraint_generatort::string_code_point_at(expr)); + } else if (starts_with(id,cprover_string_code_point_before_func)) { + return convert_bv(string_constraint_generatort::string_code_point_before(expr)); + } else if (starts_with(id,cprover_string_code_point_count_func)) { + return convert_bv(string_constraint_generatort::string_code_point_count(expr)); + } else if (starts_with(id,cprover_string_offset_by_code_point_func)) { + return convert_bv(string_constraint_generatort::string_offset_by_code_point(expr)); + } else if (starts_with(id,cprover_string_compare_to_func)) { + return convert_bv(string_constraint_generatort::string_compare_to(expr)); } - else - return string_exprt::of_expr(str,symbol_to_string,string_axioms); + } + + //return SUB::string_constraint_generatort::function_application(expr); + throw "string_constraint_generatort::string_constraint_generatort::function_application: not a string function"; } + bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now(); @@ -206,116 +258,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) return true; } -bvt string_refinementt::convert_symbol(const exprt &expr) -{ - const typet &type = expr.type(); - const irep_idt &identifier = expr.get(ID_identifier); - if(identifier.empty()) - //throw "string_refinementt::convert_symbol got empty identifier"; - assert(false); - - //debug() << "convert symbol " << expr << eom; - - if (refined_string_typet::is_unrefined_string_type(type)) { - debug() << "string_refinementt::convert_symbol of unrefined string" << eom; - // this can happen because of boolbvt::convert_equality - string_exprt str = string_of_symbol(to_symbol_expr(expr)); - bvt bv = convert_bv(str); - return bv; - } else if (expr.type() == char_type) { - bvt bv; - bv.resize(STRING_SOLVER_CHAR_WIDTH); - map.get_literals(identifier, char_type, STRING_SOLVER_CHAR_WIDTH, bv); - - forall_literals(it, bv) - if(it->var_no()>=prop.no_variables() && !it->is_constant()) - { - error() << identifier << eom; - assert(false); - } - return bv; - } else if (expr.type() == java_char_type) { - bvt bv; - bv.resize(JAVA_STRING_SOLVER_CHAR_WIDTH); - map.get_literals(identifier, java_char_type, JAVA_STRING_SOLVER_CHAR_WIDTH, bv); - - forall_literals(it, bv) - if(it->var_no()>=prop.no_variables() && !it->is_constant()) - { - error() << identifier << eom; - assert(false); - } - return bv; - } else return SUB::convert_symbol(expr); -} - - -bvt string_refinementt::convert_function_application( - const function_application_exprt &expr) -{ - const exprt &name = expr.function(); - debug() << "string_refinementt::convert_function_application" << eom; - - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinementt::convert_function_application(" - << id << ")" << eom; - - if (starts_with(id,cprover_string_literal_func) - || starts_with(id,cprover_string_concat_func) - || starts_with(id,cprover_string_substring_func) - || starts_with(id,cprover_string_char_set_func)) { - string_exprt str = make_string(expr); - bvt bv = convert_bv(str); - return bv; - } else if (starts_with(id,cprover_char_literal_func)) { - return convert_char_literal(expr); - } else if (starts_with(id,cprover_string_length_func)) { - return convert_string_length(expr); - } else if (starts_with(id,cprover_string_equal_func)) { - return convert_bv(convert_string_equal(expr)); - } else if (starts_with(id,cprover_string_equals_ignore_case_func)) { - return convert_bv(convert_string_equals_ignore_case(expr)); - } else if (starts_with(id,cprover_string_is_empty_func)) { - return convert_bv(convert_string_is_empty(expr)); - } else if (starts_with(id,cprover_string_char_at_func)) { - return convert_string_char_at(expr); - } else if (starts_with(id,cprover_string_is_prefix_func)) { - return convert_bv(convert_string_is_prefix(expr)); - } else if (starts_with(id,cprover_string_is_suffix_func)) { - return convert_string_is_suffix(expr); - } else if (starts_with(id,cprover_string_startswith_func)) { - return convert_bv(convert_string_is_prefix(expr,true)); - } else if (starts_with(id,cprover_string_endswith_func)) { - return convert_string_is_suffix(expr,true); - } else if (starts_with(id,cprover_string_contains_func)) { - return convert_string_contains(expr); - } else if (starts_with(id,cprover_string_hash_code_func)) { - return convert_bv(convert_string_hash_code(expr)); - } else if (starts_with(id,cprover_string_index_of_func)) { - return convert_bv(convert_string_index_of(expr)); - } else if (starts_with(id,cprover_string_last_index_of_func)) { - return convert_bv(convert_string_last_index_of(expr)); - } else if (starts_with(id,cprover_string_parse_int_func)) { - return convert_bv(convert_string_parse_int(expr)); - } else if (starts_with(id,cprover_string_to_char_array_func)) { - return convert_bv(convert_string_to_char_array(expr)); - } else if (starts_with(id,cprover_string_code_point_at_func)) { - return convert_bv(convert_string_code_point_at(expr)); - } else if (starts_with(id,cprover_string_code_point_before_func)) { - return convert_bv(convert_string_code_point_before(expr)); - } else if (starts_with(id,cprover_string_code_point_count_func)) { - return convert_bv(convert_string_code_point_count(expr)); - } else if (starts_with(id,cprover_string_offset_by_code_point_func)) { - return convert_bv(convert_string_offset_by_code_point(expr)); - } else if (starts_with(id,cprover_string_compare_to_func)) { - return convert_bv(convert_string_compare_to(expr)); - } - } - - //return SUB::convert_function_application(expr); - throw "string_refinement::convert_function_application: not a string function"; -} void string_refinementt::print_time(std::string s) { @@ -345,7 +287,7 @@ void string_refinementt::post_process() SUB::post_process(); } -decision_proceduret::resultt string_refinementt::dec_solve() +decision_proceduret::resultt dec_solve() { print_time("string_refinementt::dec_solve"); @@ -476,795 +418,6 @@ string_exprt string_refinementt::string_of_symbol(const symbol_exprt & sym){ } - -exprt string_refinementt::convert_string_equal(const function_application_exprt &f) { - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt eq = fresh_boolean("equal"); - typecast_exprt tc_eq(eq,f.type()); - - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string equal? - - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); - - // We want to write: - // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) - // We can't do it directly because of the universal quantification inside. - // So we say instead the three following: - // eq => s1.length = s2.length - // forall i < s1.length. eq => s1[i] = s2[i] - // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) - - symbol_exprt witness = fresh_index("witness_unequal"); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); - - string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); - - string_axioms.push_back - (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) - ).forall(qvar,zero,s1.length())); - - string_axioms.emplace_back - (not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); - - return tc_eq; -} - -exprt character_equals_ignore_case(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) { - exprt is_upper_case_1 = and_exprt(binary_relation_exprt(char_A,ID_le,char1), - binary_relation_exprt(char1,ID_le,char_Z)); - exprt is_upper_case_2 = and_exprt(binary_relation_exprt(char_A,ID_le,char2), - binary_relation_exprt(char2,ID_le,char_Z)); - return or_exprt(or_exprt(equal_exprt(char1,char2), - and_exprt(is_upper_case_1, equal_exprt(minus_exprt(plus_exprt(char_a,char1),char_A),char2))), - and_exprt(is_upper_case_2, equal_exprt(minus_exprt(plus_exprt(char_a,char2),char_A),char1))); -} - -exprt string_refinementt::convert_string_equals_ignore_case(const function_application_exprt &f) { - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt eq = fresh_boolean("equal_ignore_case"); - typecast_exprt tc_eq(eq,f.type()); - - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string equal? - - bool is_c_string = refined_string_typet::is_c_string_type(f.type()); - exprt char_a; - exprt char_A; - exprt char_Z; - if(is_c_string) { - char_a = constant_of_nat(97,refined_string_typet::char_type()); - char_A = constant_of_nat(65,refined_string_typet::char_type()); - char_Z = constant_of_nat(90,refined_string_typet::char_type()); - } else { - char_a = constant_of_nat(97,refined_string_typet::java_char_type()); - char_A = constant_of_nat(65,refined_string_typet::java_char_type()); - char_Z = constant_of_nat(90,refined_string_typet::java_char_type()); - } - - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); - symbol_exprt witness = fresh_index("witness_unequal_ignore_case"); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_ignore_case", index_type); - - string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); - - string_axioms.push_back - (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) - ).forall(qvar,zero,s1.length())); - - string_axioms.emplace_back - (not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,zero,s1.length()))); - - return tc_eq; -} - - -bvt string_refinementt::convert_string_length( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - string_exprt str = make_string(args[0]); - exprt length = str.length(); - return convert_bv(length); -} - -exprt string_refinementt::is_positive(const exprt & x) -{ return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } - - -exprt string_refinementt::convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) -{ - symbol_exprt isprefix = fresh_boolean("isprefix"); - string_axioms.emplace_back(isprefix, str >= plus_exprt(prefix.length(),offset)); - - // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_isprefix", index_type); - string_axioms.push_back - (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) - ).forall(qvar,zero,prefix.length())); - - symbol_exprt witness = fresh_index("witness_not_isprefix"); - - or_exprt s0_notpref_s1(not_exprt(str >= plus_exprt(prefix.length(),offset)), - and_exprt - (str >= plus_exprt(prefix.length(),offset), - and_exprt(binary_relation_exprt(witness,ID_ge,zero), - and_exprt(prefix > witness, - notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); - - string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); - return isprefix; -} - -exprt string_refinementt::convert_string_is_prefix -(const function_application_exprt &f, bool swap_arguments) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - string_exprt s0 = make_string(args[swap_arguments?1:0]); - string_exprt s1 = make_string(args[swap_arguments?0:1]); - exprt offset; - - if(args.size() == 2) offset = zero; - else if (args.size() == 3) offset = args[2]; - - return typecast_exprt(convert_string_is_prefix(s0,s1,offset),f.type()); -} - -exprt string_refinementt::convert_string_is_empty -(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt is_empty = fresh_boolean("is_empty"); - string_exprt s0 = make_string(args[0]); - string_axioms.emplace_back(implies_exprt(is_empty, equal_exprt(s0.length(),zero))); - string_axioms.emplace_back(implies_exprt(equal_exprt(s0.length(),zero),is_empty)); - return typecast_exprt(is_empty,f.type()); - -} - -bvt string_refinementt::convert_string_is_suffix -(const function_application_exprt &f, bool swap_arguments) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string issuffix? - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt issuffix = fresh_boolean("issuffix"); - typecast_exprt tc_issuffix(issuffix,f.type()); - string_exprt s0 = make_string(args[swap_arguments?1:0]); - string_exprt s1 = make_string(args[swap_arguments?0:1]); - - - // issufix(s1,s0) => s0.length >= s1.length - // && forall witness < s1.length. - // issufix => s1[witness] = s0[witness + s0.length - s1.length] - // && !issuffix => s1.length > s0.length - // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - - string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); - - symbol_exprt qvar = string_exprt::fresh_symbol("QA_suffix", index_type); - exprt qvar_shifted = plus_exprt(qvar, - minus_exprt(s1.length(), s0.length())); - string_axioms.push_back - (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) - ).forall(qvar,zero,s0.length())); - - symbol_exprt witness = fresh_index("witness_not_suffix"); - - exprt shifted = plus_exprt(witness, - minus_exprt(s1.length(), s0.length())); - - implies_exprt lemma2(not_exprt(issuffix), - and_exprt(is_positive(witness), - or_exprt(s0 > s1, - and_exprt(s0 > witness, - notequal_exprt(s0[witness],s1[shifted]))))); - - string_axioms.emplace_back(lemma2); - - return convert_bv(tc_issuffix); -} - - -bvt string_refinementt::convert_string_contains( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string contains? - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt contains = fresh_boolean("contains"); - typecast_exprt tc_contains(contains,f.type()); - string_exprt s0 = make_string(args[0]); - string_exprt s1 = make_string(args[1]); - - // contains => s0.length >= s1.length - // && startpos <= s0.length - s1.length - // && forall qvar < s1.length. - // contains => s1[qvar] = s0[startpos + qvar] - // !contains => s1.length > s0.length - // || (forall startpos <= s0.length - s1.length. - // exists witness < s1.length && s1[witness] != s0[witness + startpos] - - string_axioms.emplace_back(implies_exprt(contains, s0 >= s1)); - - symbol_exprt startpos = fresh_index("startpos_contains"); - - string_axioms.emplace_back(//implies_exprt(contains, - and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - - symbol_exprt qvar = string_exprt::fresh_symbol("QA_contains", index_type); - exprt qvar_shifted = plus_exprt(qvar, startpos); - string_axioms.push_back - (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) - ).forall(qvar,zero,s1.length())); - - // We rewrite the axiom for !contains as: - // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) - // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] - - string_axioms.push_back - (string_constraintt::not_contains - (zero,plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), - and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); - - return convert_bv(tc_contains); -} - - -symbol_exprt string_refinementt::fresh_index(const irep_idt &prefix){ - symbol_exprt i = string_exprt::fresh_symbol(prefix,index_type); - index_symbols.push_back(i); - return i; -} - -symbol_exprt string_refinementt::fresh_boolean(const irep_idt &prefix){ - symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); - boolean_symbols.push_back(b); - return b; -} - -exprt string_refinementt::convert_string_hash_code(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - string_exprt str = make_string(args[0]); - typet return_type = f.type(); - - // initialisation of the missing pool variable - std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(hash.find(it->second) == hash.end()) - hash[it->second] = string_exprt::fresh_symbol("hash", return_type); - - // for each string s. - // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) - - // WARNING: the specification may be incomplete - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { - symbol_exprt i = string_exprt::fresh_symbol("index_hash", refined_string_typet::index_type()); - string_axioms.emplace_back - (or_exprt - (equal_exprt(hash[it->second],hash[str]), - or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), - and_exprt - (not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero ))) - )))); - } - - - return hash[str]; -} - -exprt string_refinementt::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ - symbol_exprt index = fresh_index("index_of"); - symbol_exprt contains = fresh_boolean("contains_in_index_of"); - - // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) - // && forall n. from_index <= n < i => s[n] != c - - string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); - - symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); - - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); - - symbol_exprt m = string_exprt::fresh_symbol("QA_index_of",index_type); - - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); - - return index; -} - -exprt string_refinementt::convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) -{ - symbol_exprt offset = fresh_index("index_of"); - - symbol_exprt contains = fresh_boolean("contains_substring"); - string_axioms.emplace_back(contains, and_exprt - (str >= plus_exprt(substring.length(),offset), - binary_relation_exprt(offset,ID_ge,from_index))); - string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); - - // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); - string_axioms.push_back - (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,zero,substring.length())); - - - debug() << "string_refinementt::convert_string_index_of_string : warning the stpecification is only partial" << eom; - - return offset; -} - -exprt string_refinementt::convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) -{ - symbol_exprt offset = fresh_index("index_of"); - - symbol_exprt contains = fresh_boolean("contains_substring"); - string_axioms.emplace_back(contains, and_exprt - (str >= plus_exprt(substring.length(),offset), - binary_relation_exprt(offset,ID_le,from_index))); - string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); - - // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); - string_axioms.push_back - (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,zero,substring.length())); - - debug() << "string_refinementt::convert_string_last_index_of_string : warning the stpecification is only partial" << eom; - return offset; -} - - -exprt string_refinementt::convert_string_index_of( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == index_type); - string_exprt str = make_string(args[0]); - exprt c = args[1]; - exprt from_index; - - if(args.size() == 2) from_index = zero; - else if (args.size() == 3) from_index = args[2]; - else assert(false); - - if(refined_string_typet::is_java_string_type(c.type())){ - string_exprt sub = make_string(c); - return convert_string_index_of_string(str,sub,from_index); - } else { - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); - } - return convert_string_index_of(str,c,from_index); - } - -} - -exprt string_refinementt::convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index) { - symbol_exprt index = fresh_index("last_index_of"); - symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); - - // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) - // && forall n. i <= n <= from_index => s[n] != c - - exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); - string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); - - symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); - - symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,from_index_plus_one)); - - return index; - -} - -exprt string_refinementt::convert_string_last_index_of( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == index_type); - string_exprt str = make_string(args[0]); - exprt c = args[1]; - exprt from_index; - - if(args.size() == 2) from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); - else if (args.size() == 3) from_index = args[2]; - else assert(false); - - if(refined_string_typet::is_java_string_type(c.type())){ - string_exprt sub = make_string(c); - return convert_string_last_index_of_string(str,sub,from_index); - } else { - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); - } - return convert_string_last_index_of(str,c,from_index); - } -} - -bvt string_refinementt::convert_char_literal( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); // there should be exactly 1 argument to char literal - - const exprt &arg = args[0]; - // for C programs argument to char literal should be one string constant of size one - if(arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) - { - const string_constantt s = to_string_constant(arg.op0().op0().op0()); - irep_idt sval = s.get_value(); - assert(sval.size() == 1); - - std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); - - return convert_bv(constant_exprt(binary, char_type)); - } - else { - throw "convert_char_literal unimplemented"; - } - -} - - -bvt string_refinementt::convert_string_char_at( - const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //string_char_at expects 2 arguments - string_exprt str = make_string(args[0]); - - if(f.type() == char_type) { - symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); - string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); - return convert_bv(char_sym); - } else { - assert(f.type() == java_char_type); - symbol_exprt char_sym = string_exprt::fresh_symbol("char",java_char_type); - string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); - return convert_bv(char_sym); - } -} - - - -constant_exprt string_refinementt::constant_of_nat(int i,typet t) { - return constant_exprt(integer2binary(i, boolbv_width(t)), t); -} - -exprt string_refinementt::convert_string_parse_int -(const function_application_exprt &expr) -{ - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = make_string(args[0]); - typet type = expr.type(); - symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); - - exprt zero_char; - exprt minus_char; - exprt plus_char; - if(refined_string_typet::is_c_string_type(args[0].type())) { - plus_char = constant_of_nat(43,refined_string_typet::char_type()); - minus_char = constant_of_nat(45,refined_string_typet::char_type()); - zero_char = constant_of_nat(48,refined_string_typet::char_type()); - } - else { - plus_char = constant_of_nat(43,refined_string_typet::java_char_type()); - minus_char = constant_of_nat(45,refined_string_typet::java_char_type()); - zero_char = constant_of_nat(48,refined_string_typet::java_char_type()); - } - - exprt ten = constant_of_nat(10,type); - - exprt chr = str[refined_string_typet::index_of_int(0)]; - exprt starts_with_minus = equal_exprt(chr,minus_char); - exprt starts_with_plus = equal_exprt(chr,plus_char); - exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); - - for(int size=1; size<=10;size++) { - exprt sum = constant_of_nat(0,type); - exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(int j=1; j::iterator i = current_index_set.begin(), - end = current_index_set.end(); i != end; ++i) { - const exprt &s = i->first; - debug() << "IS(" << pretty_short(s) << ") == {"; - - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) - debug() << pretty_short (*j) << "; "; - debug() << "}" << eom; - - - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) { - const exprt &val = *j; - - for (size_t k = 0; k < universal_axioms.size(); ++k) { - assert(universal_axioms[k].is_univ_quant()); - string_constraintt lemma = instantiate(universal_axioms[k], s, val); - assert(lemma.is_simple()); - add_lemma(lemma); - } - } - } -} - -exprt string_refinementt::convert_string_to_char_array -(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - - string_exprt str = make_string(args[0]); - debug() << "convert_string_to_char_array returns: " << str.content().pretty() << eom; - return str.content(); -} - - - - - -exprt string_refinementt::convert_string_compare_to(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); - typet return_type = f.type(); - symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); - - // In the lexicographic comparison, x is the first point where the two strings differ. - // res == 0 => |s1| = |s2| && forall i < |s1|. s1[i] == s2[i] - // res != 0 => - // (|s1| <= |s2| && exists x < |s1|. res = s1[x] - s2[x] && forall i= |s2| && exists x < |s2|. res = s1[x] - s2[x] && forall i |s2| && res = |s1| - |s2| && forall i<|s2| s1[i]=s2[i]) - - // The second part can be rewriten as: - // exists x. - // res != 0 ==> x> 0 && - // ((|s1| <= |s2| && x < |s1|) || (|s1| >= |s2| && x < |s2|) && res = s1[x] - s2[x] ) - // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| - // && forall i < x. res != 0 => s1[i] = s2[i] - - symbol_exprt i = string_exprt::fresh_symbol("QA_compare_to",index_type); - equal_exprt res_null = equal_exprt(res,constant_of_nat(0,return_type)); - string_axioms.emplace_back(res_null, equal_exprt(s1.length(),s2.length())); - string_axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,zero,s1.length())); - symbol_exprt x = fresh_index("index_compare_to"); - string_axioms.push_back - (implies_exprt - (not_exprt(res_null), - and_exprt - (binary_relation_exprt(x,ID_ge,constant_of_nat(0,return_type)), - or_exprt - (and_exprt - (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), - or_exprt - (and_exprt(s1<=s2,s1 > x), and_exprt(s1>=s2,s2 > x))), - and_exprt - (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), - or_exprt - (and_exprt(s2>s1,equal_exprt(x,s1.length())), and_exprt(s1>s2,equal_exprt(x,s2.length())))))) - )); - - string_axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,zero,x)); - - return res; -} - -symbol_exprt string_refinementt::convert_string_intern(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - string_exprt str = make_string(args[0]); - typet return_type = f.type(); - - - // initialisation of the missing pool variable - std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(pool.find(it->second) == pool.end()) - pool[it->second] = string_exprt::fresh_symbol("pool", return_type); - - // intern(str) = s_0 || s_1 || ... - // for each string s. - // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) - - //symbol_exprt intern = string_exprt::fresh_symbol("intern",return_type); - - exprt disj = false_exprt(); - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); - - string_axioms.emplace_back(disj); - - - // WARNING: the specification may be incomplete or incorrect - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(it->second != str) { - symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); - string_axioms.emplace_back - (or_exprt - (equal_exprt(pool[it->second],pool[str]), - or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), - and_exprt(not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero))) - )))); - } - - - return pool[str]; -} - - //// Pass algorithm unsigned integer_of_expr(const constant_exprt & expr) { diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 07334e19d96..dc2cde3d5af 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -15,6 +15,10 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include #include +#include + +// This is to analyse the performances of the different steps +#include class string_refinementt: public bv_refinementt { @@ -38,6 +42,8 @@ class string_refinementt: public bv_refinementt private: typedef bv_refinementt SUB; + std::chrono::high_resolution_clock::time_point start_time; + protected: @@ -55,39 +61,6 @@ class string_refinementt: public bv_refinementt // fills as many 0 as necessary in the bit vectors to have the right width bvt convert_bool_bv(const exprt &boole, const exprt &orig); - // The following functions convert different string functions - // and add the corresponding lemmas to a list of properties to be checked - exprt convert_string_equal(const function_application_exprt &f); - exprt convert_string_equals_ignore_case(const function_application_exprt &f); - exprt convert_string_is_empty(const function_application_exprt &f); - bvt convert_string_length(const function_application_exprt &f); - exprt convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); - exprt convert_string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); - bvt convert_string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); - bvt convert_string_contains(const function_application_exprt &f); - exprt convert_string_hash_code(const function_application_exprt &f); - exprt convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt convert_string_index_of(const function_application_exprt &f); - exprt convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt convert_string_last_index_of(const function_application_exprt &f); - bvt convert_char_literal(const function_application_exprt &f); - bvt convert_string_char_at(const function_application_exprt &f); - exprt convert_string_code_point_at(const function_application_exprt &f); - exprt convert_string_code_point_before(const function_application_exprt &f); - - // Warning: this function is underspecified - exprt convert_string_code_point_count(const function_application_exprt &f); - // Warning: this function is underspecified - exprt convert_string_offset_by_code_point(const function_application_exprt &f); - exprt convert_string_parse_int(const function_application_exprt &f); - exprt convert_string_to_char_array(const function_application_exprt &f); - - exprt convert_string_compare_to(const function_application_exprt &f); - - // Warning: this does not work at the moment because of the way we treat string pointers - symbol_exprt convert_string_intern(const function_application_exprt &f); private: @@ -96,8 +69,7 @@ class string_refinementt: public bv_refinementt exprt is_high_surrogate(const exprt & chr); exprt is_low_surrogate(const exprt & chr); - // All constraints produced by the code - axiom_vect string_axioms; + string_constraint_generatort generator; // Simple constraints that have been given to the solver expr_sett seen_instances; @@ -108,14 +80,6 @@ class string_refinementt: public bv_refinementt int nb_sat_iteration; - // Boolean symbols that are used to know whether the results - // of some functions should be true. - std::vector boolean_symbols; - - // Symbols used in existential quantifications - std::vector index_symbols; - - // Unquantified lemmas that have newly been added std::vector cur; @@ -130,24 +94,10 @@ class string_refinementt: public bv_refinementt // Tells if there is a index in the index set where the same variable occurs several time. bool variable_with_multiple_occurence_in_index; - std::map symbol_to_string; - inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ - symbol_to_string[sym.get_identifier()]= expr; - } - - string_exprt string_of_symbol(const symbol_exprt & sym); - std::map pool; std::map hash; - // Create a new string expression and add the necessary lemma - // to ensure its equal to the given string expression. - string_exprt make_string(const exprt &str); - - // Same thing but associates the string to the given symbol instead - // of returning it. - void make_string(const symbol_exprt & sym, const exprt &str); // Natural number expression corresponding to a constant integer constant_exprt constant_of_nat(int i,typet t); From 9c7ee9b585988844d1081efe03c1eef0eff2ee32 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 18 Oct 2016 17:46:06 +0100 Subject: [PATCH 151/221] restructuration using a constraint generator class --- .../string_constraint_generator.cpp | 71 +++- .../refinement/string_constraint_generator.h | 58 ++-- src/solvers/refinement/string_refinement.cpp | 315 ++++++------------ 3 files changed, 207 insertions(+), 237 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index d98545903b7..91517205bff 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -126,13 +126,78 @@ string_exprt string_constraint_generatort::get_string_of_symbol(std::map axioms; // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. @@ -30,6 +32,20 @@ class string_constraint_generatort { // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); + + // Boolean symbols that are used to know whether the results + // of some functions should be true. + std::vector boolean_symbols; + + // Symbols used in existential quantifications + std::vector index_symbols; + + std::map symbol_to_string; + inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ + symbol_to_string[sym.get_identifier()]= expr; + } + + string_exprt string_of_expr(const exprt & expr); string_exprt string_of_symbol(const symbol_exprt & sym); @@ -68,31 +84,31 @@ class string_constraint_generatort { string_exprt string_replace(const function_application_exprt &f); // Warning: not working correctly at the moment - string_exprt string_value_of(const function_application_exprt &f, axiom_vect &axioms); + string_exprt string_value_of(const function_application_exprt &f); string_exprt string_set_length(const function_application_exprt &f); string_exprt string_copy(const function_application_exprt &f); string_exprt string_format(const function_application_exprt &f); - string_exprt empty_string(const function_application_exprt &f, axiom_vect & axioms); + string_exprt empty_string(const function_application_exprt &f); string_exprt of_int(const function_application_exprt &f); - string_exprt of_int(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); - string_exprt of_int_hex(const exprt &i, axiom_vect & axioms, bool is_c_string); + string_exprt of_int(const exprt &i, bool is_c_string, int max_size); + string_exprt of_int_hex(const exprt &i, bool is_c_string); string_exprt of_int_hex(const function_application_exprt &f,axiom_vect & axioms); - string_exprt of_long(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_long(const exprt &i, axiom_vect & axioms, bool is_c_string, int max_size); - string_exprt of_bool(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_bool(const exprt &i, axiom_vect & axioms, bool is_c_string); - string_exprt of_char(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_char(const exprt &i, axiom_vect & axioms, bool is_c_string); + string_exprt of_long(const function_application_exprt &f); + string_exprt of_long(const exprt &i, bool is_c_string, int max_size); + string_exprt of_bool(const function_application_exprt &f); + string_exprt of_bool(const exprt &i, bool is_c_string); + string_exprt of_char(const function_application_exprt &f); + string_exprt of_char(const exprt &i, bool is_c_string); // Warning: the specifications of these functions is only partial: - string_exprt of_float(const function_application_exprt &f, axiom_vect & axioms); - string_exprt of_float(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision=false); - string_exprt of_double(const function_application_exprt &f, axiom_vect & axioms); + string_exprt of_float(const function_application_exprt &f); + string_exprt of_float(const exprt &f, bool is_c_string, bool double_precision=false); + string_exprt of_double(const function_application_exprt &f); - string_exprt code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string); - string_exprt java_char_array(const exprt & char_array, axiom_vect & axioms); + string_exprt code_point(const exprt &code_point, bool is_c_string); + string_exprt java_char_array(const exprt & char_array); string_exprt string_if(const if_exprt &expr); @@ -138,18 +154,6 @@ class string_constraint_generatort { // Check that the given string is from the right language void check_char_type(const exprt & str); - std::vector axioms; - // Boolean symbols that are used to know whether the results - // of some functions should be true. - std::vector boolean_symbols; - - // Symbols used in existential quantifications - std::vector index_symbols; - - std::map symbol_to_string; - inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ - symbol_to_string[sym.get_identifier()]= expr; - } }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 62c1a823bb2..9df31ab79d2 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -14,7 +14,6 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include - // This is mostly for debugging: #include #include @@ -129,83 +128,17 @@ bvt string_refinementt::convert_symbol(const exprt &expr) } -bvt string_refinementt::convert_function_application( - const function_application_exprt &expr) +bvt string_refinementt::convert_function_application(const function_application_exprt &expr) { const exprt &name = expr.function(); - debug() << "string_refinementt::convert_function_application" << eom; - - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - debug() << "string_refinementt::convert_function_application(" - << id << ")" << eom; - - if (starts_with(id,cprover_string_literal_func) - || starts_with(id,cprover_string_concat_func) - || starts_with(id,cprover_string_substring_func) - || starts_with(id,cprover_string_char_set_func)) { - string_exprt str = generator.make_string(expr); - bvt bv = string_constraint_generatort::bv(str); - return bv; - } else if (starts_with(id,cprover_char_literal_func)) { - return string_constraint_generatort::char_literal(expr); - } else if (starts_with(id,cprover_string_length_func)) { - return string_constraint_generatort::string_length(expr); - } else if (starts_with(id,cprover_string_equal_func)) { - return convert_bv(string_constraint_generatort::string_equal(expr)); - } else if (starts_with(id,cprover_string_equals_ignore_case_func)) { - return convert_bv(string_constraint_generatort::string_equals_ignore_case(expr)); - } else if (starts_with(id,cprover_string_is_empty_func)) { - return convert_bv(string_constraint_generatort::string_is_empty(expr)); - } else if (starts_with(id,cprover_string_char_at_func)) { - return string_constraint_generatort::string_char_at(expr); - } else if (starts_with(id,cprover_string_is_prefix_func)) { - return convert_bv(string_constraint_generatort::string_is_prefix(expr)); - } else if (starts_with(id,cprover_string_is_suffix_func)) { - return string_constraint_generatort::string_is_suffix(expr); - } else if (starts_with(id,cprover_string_startswith_func)) { - return convert_bv(string_constraint_generatort::string_is_prefix(expr,true)); - } else if (starts_with(id,cprover_string_endswith_func)) { - return string_constraint_generatort::string_is_suffix(expr,true); - } else if (starts_with(id,cprover_string_contains_func)) { - return string_constraint_generatort::string_contains(expr); - } else if (starts_with(id,cprover_string_hash_code_func)) { - return convert_bv(string_constraint_generatort::string_hash_code(expr)); - } else if (starts_with(id,cprover_string_index_of_func)) { - return convert_bv(string_constraint_generatort::string_index_of(expr)); - } else if (starts_with(id,cprover_string_last_index_of_func)) { - return convert_bv(string_constraint_generatort::string_last_index_of(expr)); - } else if (starts_with(id,cprover_string_parse_int_func)) { - return convert_bv(string_constraint_generatort::string_parse_int(expr)); - } else if (starts_with(id,cprover_string_to_char_array_func)) { - return convert_bv(string_constraint_generatort::string_to_char_array(expr)); - } else if (starts_with(id,cprover_string_code_point_at_func)) { - return convert_bv(string_constraint_generatort::string_code_point_at(expr)); - } else if (starts_with(id,cprover_string_code_point_before_func)) { - return convert_bv(string_constraint_generatort::string_code_point_before(expr)); - } else if (starts_with(id,cprover_string_code_point_count_func)) { - return convert_bv(string_constraint_generatort::string_code_point_count(expr)); - } else if (starts_with(id,cprover_string_offset_by_code_point_func)) { - return convert_bv(string_constraint_generatort::string_offset_by_code_point(expr)); - } else if (starts_with(id,cprover_string_compare_to_func)) { - return convert_bv(string_constraint_generatort::string_compare_to(expr)); - } - } - - //return SUB::string_constraint_generatort::function_application(expr); - throw "string_constraint_generatort::string_constraint_generatort::function_application: not a string function"; + debug() << "string_refinementt::convert_function_application " << name << eom; + exprt f = generator.function_application(expr); + return convert_bv(f); } - - bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { - std::chrono::high_resolution_clock::time_point t1 = std::chrono::high_resolution_clock::now(); - - auto duration = std::chrono::duration_cast(t1-start_time).count(); - if(!equality_propagation) return true; - const typet &type=ns.follow(expr.lhs().type()); if(expr.lhs().id()==ID_symbol && @@ -213,46 +146,34 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - debug() << "string_refinementt(" << (duration / 1000) << "ms)"; - debug() << " " << pretty_short(expr.lhs()) << " <- " + debug() << "string_refinementt " << pretty_short(expr.lhs()) << " <- " << pretty_short(expr.rhs()) << eom; - - if(refined_string_typet::is_unrefined_string_type(type)) { - symbol_exprt sym = to_symbol_expr(expr.lhs()); - make_string(sym,expr.rhs()); - return false; - } - else if(type == char_type) { - const bvt &bv1=convert_bv(expr.rhs()); - symbol_exprt sym = to_symbol_expr(expr.lhs()); - const irep_idt &identifier = sym.get_identifier(); - map.set_literals(identifier, char_type, bv1); - if(freeze_all) set_frozen(bv1); - return false; - } - else if(type == java_char_type) { - const bvt &bv1=convert_bv(expr.rhs()); - symbol_exprt sym = to_symbol_expr(expr.lhs()); - const irep_idt &identifier = sym.get_identifier(); - map.set_literals(identifier, java_char_type, bv1); - if(freeze_all) set_frozen(bv1); - return false; - } - else if(type==ns.follow(expr.rhs().type())) { - if(is_unbounded_array(type)) - return true; - - const bvt &bv1=convert_bv(expr.rhs()); - - const irep_idt &identifier= - to_symbol_expr(expr.lhs()).get_identifier(); - - map.set_literals(identifier, type, bv1); - - if(freeze_all) set_frozen(bv1); - - return false; - } + + if(refined_string_typet::is_unrefined_string_type(type)) + { + symbol_exprt sym = to_symbol_expr(expr.lhs()); + generator.make_string(sym,expr.rhs()); + return false; + } + else if(type == generator.get_char_type()) + { + const bvt &bv1=convert_bv(expr.rhs()); + symbol_exprt sym = to_symbol_expr(expr.lhs()); + const irep_idt &identifier = sym.get_identifier(); + map.set_literals(identifier, generator.get_char_type(), bv1); + if(freeze_all) set_frozen(bv1); + return false; + } + else if(type==ns.follow(expr.rhs().type())) + { + if(is_unbounded_array(type)) return true; + const bvt &bv1=convert_bv(expr.rhs()); + const irep_idt &identifier= + to_symbol_expr(expr.lhs()).get_identifier(); + map.set_literals(identifier, type, bv1); + if(freeze_all) set_frozen(bv1); + return false; + } } return true; @@ -260,56 +181,40 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) -void string_refinementt::print_time(std::string s) { +void string_refinementt::print_time(std::string s) +{ debug() << s << " TIME == " - << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; + << (std::chrono::duration_cast + (std::chrono::high_resolution_clock::now()-start_time).count() / 1000) + << eom; } -// We add instantiations before launching the solver void string_refinementt::post_process() -{ - - /* - debug() << not_contains_axioms.size() << " not_contains constraints" << eom; - nb_sat_iteration = 0; - debug() << "string_refinementt::post_process at step" << step++ << " time in ms " - << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; +{ SUB::post_process(); } - debug() << "string_refinementt::post_process: warning update_index_set has to be checked" << eom; - update_index_set(universal_axioms); - update_index_set(cur); - cur.clear(); - add_instantiations(); - debug() << "string_refinementt::post_process at step" << step++ << " time in ms " - << (std::chrono::duration_cast(std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; - */ - - SUB::post_process(); -} - -decision_proceduret::resultt dec_solve() +decision_proceduret::resultt string_refinementt::dec_solve() { print_time("string_refinementt::dec_solve"); - for(int i = 0; i < string_axioms.size(); i++) - if(string_axioms[i].is_simple()) - add_lemma(string_axioms[i]); - else if(string_axioms[i].is_string_constant()) - add_lemma(string_axioms[i]); //,false); - else if(string_axioms[i].is_univ_quant()) { - debug() << "universaly quantified : " << pretty_short(string_axioms[i]) << eom; - universal_axioms.push_back(string_axioms[i]); + for(unsigned i = 0; i < generator.axioms.size(); i++) + if(generator.axioms[i].is_simple()) + add_lemma(generator.axioms[i]); + else if(generator.axioms[i].is_string_constant()) + add_lemma(generator.axioms[i]); //,false); + else if(generator.axioms[i].is_univ_quant()) { + debug() << "universaly quantified : " << pretty_short(generator.axioms[i]) << eom; + universal_axioms.push_back(generator.axioms[i]); } else { - assert(string_axioms[i].is_not_contains()); - string_axioms[i].witness = string_exprt::fresh_symbol + assert(generator.axioms[i].is_not_contains()); + generator.axioms[i].witness = string_exprt::fresh_symbol ("not_contains_witness", array_typet(refined_string_typet::index_type(), infinity_exprt(refined_string_typet::index_type()))); - not_contains_axioms.push_back(string_axioms[i]); + not_contains_axioms.push_back(generator.axioms[i]); } - string_axioms.clear(); + //string_axioms.clear(); should not be necessary initial_index_set(universal_axioms); debug() << "string_refinementt::dec_solve: warning update_index_set has to be checked" << eom; @@ -351,11 +256,11 @@ decision_proceduret::resultt dec_solve() display_index_set(); debug()<< "instantiating NOT_CONTAINS constraints" << eom; - for(int i=0; i lemmas; instantiate_not_contains(not_contains_axioms[i],lemmas); - for(int j=0; j::iterator it; - for (it = symbol_to_string.begin(); it != symbol_to_string.end(); ++it) + for (it = generator.symbol_to_string.begin(); it != generator.symbol_to_string.end(); ++it) { string_exprt refined = it->second; const exprt &econtent = refined.content(); @@ -519,14 +410,14 @@ bool string_refinementt::check_axioms() << string_of_array(econtent,len) << eom; } - for(std::vector::iterator it = boolean_symbols.begin(); - it != boolean_symbols.end(); it++) { + for(std::vector::iterator it = generator.boolean_symbols.begin(); + it != generator.boolean_symbols.end(); it++) { debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } - for(std::vector::iterator it = index_symbols.begin(); - it != index_symbols.end(); it++) { + for(std::vector::iterator it = generator.index_symbols.begin(); + it != generator.index_symbols.end(); it++) { debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } @@ -562,7 +453,7 @@ bool string_refinementt::check_axioms() debug() << "there are " << not_contains_axioms.size() << " not_contains axioms" << eom; for (size_t i = 0; i < not_contains_axioms.size(); ++i) { - exprt val = get(not_contains_axioms[i].witness_of(zero)); + exprt val = get(not_contains_axioms[i].witness_of(refined_string_typet::index_zero())); violated.push_back(std::make_pair(i, val)); } @@ -664,32 +555,42 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { // We should group constants together... const exprt &t = it->first; int second = negated?(-it->second):it->second; - if(t.id() == ID_constant) { - std::string value(to_constant_expr(t).get_value().c_str()); - constants += binary2integer(value,true) * second; - } else { - if(second != 0) - if(second == -1) - if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); - else sum = minus_exprt(sum,t); - else if(second == 1) - if(sum == refined_string_typet::index_of_int(0)) sum = t; - else sum = plus_exprt(sum, t); - else { - debug() << "in string_refinementt::sum_of_map:" - << " warning: several occurences of the same variable: " - << t.pretty() << eom; - variable_with_multiple_occurence_in_index = true; - if(second > 1) - for(int i = 0; i < second; i++) - sum = plus_exprt(sum, t); - else - for(int i = 0; i > second; i--) - sum = minus_exprt(sum, t); - } - } + if(t.id() == ID_constant) + { + std::string value(to_constant_expr(t).get_value().c_str()); + constants += binary2integer(value,true) * second; + } + else + { + if(second != 0) + { + if(second == -1) + { + if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); + else sum = minus_exprt(sum,t); + } + else if(second == 1) + { + if(sum == refined_string_typet::index_of_int(0)) sum = t; + else sum = plus_exprt(sum, t); + } + } + else + { + debug() << "in string_refinementt::sum_of_map:" + << " warning: several occurences of the same variable: " + << t.pretty() << eom; + variable_with_multiple_occurence_in_index = true; + if(second > 1) + for(int i = 0; i < second; i++) + sum = plus_exprt(sum, t); + else + for(int i = 0; i > second; i--) + sum = minus_exprt(sum, t); + } + } } - + return plus_exprt(sum,constant_exprt(integer2binary(constants, STRING_SOLVER_INDEX_WIDTH), refined_string_typet::index_type())); } @@ -879,7 +780,7 @@ string_constraintt string_refinementt::instantiate(const string_constraintt &axi exprt instance(axiom); replace_expr(axiom.get_univ_var(), r, instance); // We are not sure the index set contains only positive numbers - exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(zero,ID_le,val)); + exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val)); replace_expr(axiom.get_univ_var(), r, bounds); return string_constraintt(bounds,instance); } @@ -903,11 +804,11 @@ void string_refinementt::instantiate_not_contains(const string_constraintt & axi new_lemmas.push_back(lemma); // we put bounds on the witnesses: 0 <= v <= |s0| - |s1| ==> 0 <= v+w[v] < |s0| && 0 <= w[v] < |s1| exprt witness_bounds = implies_exprt - (and_exprt(binary_relation_exprt(zero,ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), - and_exprt(binary_relation_exprt(zero,ID_le,plus_exprt(val,axiom.witness_of(val))), + (and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), + and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,plus_exprt(val,axiom.witness_of(val))), and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,axiom.witness_of(val))), and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,axiom.witness_of(val)), - binary_relation_exprt(zero,ID_le,axiom.witness_of(val)))))); + binary_relation_exprt(refined_string_typet::index_zero(),ID_le,axiom.witness_of(val)))))); new_lemmas.push_back(witness_bounds); } } From fa6eece6e56741fe2ca53220344ade3449d5d37f Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 19 Oct 2016 17:17:48 +0100 Subject: [PATCH 152/221] restructuration using a constraint generator class --- src/goto-programs/pass_preprocess.cpp | 8 +- src/solvers/refinement/string_constraint.cpp | 5 + src/solvers/refinement/string_constraint.h | 2 + .../string_constraint_generator.cpp | 2133 ++++++++--------- .../refinement/string_constraint_generator.h | 136 +- src/solvers/refinement/string_expr.cpp | 5 +- src/solvers/refinement/string_expr.h | 43 +- src/solvers/refinement/string_refinement.cpp | 38 +- src/solvers/refinement/string_refinement.h | 14 +- 9 files changed, 1115 insertions(+), 1269 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b67edede518..801113b166b 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -40,7 +40,7 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f rhs.type()=old_type.return_type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(int i = 0; i < function_call.arguments().size(); i++) + for(unsigned i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.lhs(), rhs); assignment.add_source_location()=function_call.source_location(); @@ -89,7 +89,7 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g rhs.type()=function_call.arguments()[0].type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(int i = 1; i < function_call.arguments().size(); i++) + for(unsigned i = 1; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); code_assignt assignment(function_call.arguments()[0], rhs); assignment.add_source_location()=function_call.source_location(); @@ -118,7 +118,7 @@ void make_string_function_side_effect rhs.type()=return_type;//to_pointer_type(return_type).subtype(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(int i = 0; i < function_call.arguments().size(); i++) + for(unsigned i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); //code_assignt assignment(dereference_exprt(function_call.arguments()[0]), rhs); code_assignt assignment(function_call.arguments()[0], rhs); @@ -163,7 +163,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu if(i_it->is_function_call()) { code_function_callt &function_call=to_code_function_call(i_it->code); - for(int i = 0; i < function_call.arguments().size(); i++) + for(unsigned i = 0; i < function_call.arguments().size(); i++) if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index d2dda73ef7f..dbba21d805c 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -70,3 +70,8 @@ string_constraintt string_constraintt::exists(const symbol_exprt & exist, const and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), binary_relation_exprt(exist, ID_lt, bound_sup)))); } + +string_constraintt string_constraintt::exists(const symbol_exprt & univ, const exprt & bound_sup) +{ + return exists(univ,refined_string_typet::index_zero(),bound_sup); +} diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 977930bb088..bf664f07211 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -55,6 +55,8 @@ class string_constraintt : public exprt // Bound a variable that is existentially quantified string_constraintt exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); + // Default bound inferior is 0 + string_constraintt exists(const symbol_exprt & exist, const exprt & bound_sup); static string_constraintt not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 91517205bff..99e3e2e7cc1 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -10,6 +10,8 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include +#include +#include constant_exprt string_constraint_generatort::constant_char(int i) { @@ -21,8 +23,14 @@ constant_exprt string_constraint_generatort::constant_char(int i) case JAVA : return constant_exprt(integer2binary(i,JAVA_STRING_SOLVER_CHAR_WIDTH),refined_string_typet::java_char_type()); break; default: assert(false); + } } -} + + + + +constant_exprt string_constraint_generatort::constant_unsigned(int i, size_t width) +{ return constant_exprt(integer2binary(i,width),unsignedbv_typet(width)); } void string_constraint_generatort::check_char_type(const exprt & str) { @@ -30,14 +38,16 @@ void string_constraint_generatort::check_char_type(const exprt & str) assert(refined_string_typet::is_c_string_type(str.type())); else if(language == UNKNOWN) - if(refined_string_typet::is_c_string_type(str.type())) - language = C; - else - language = JAVA; + { + if(refined_string_typet::is_c_string_type(str.type())) + language = C; + else + language = JAVA; + } } -unsignedbv_typet get_char_type() +unsignedbv_typet string_constraint_generatort::get_char_type() { if(language==C) return refined_string_typet::char_type(); @@ -45,7 +55,7 @@ unsignedbv_typet get_char_type() else assert(false); } -unsignedbv_typet get_char_width() +size_t string_constraint_generatort::get_char_width() { if(language==C) return STRING_SOLVER_CHAR_WIDTH; @@ -53,77 +63,89 @@ unsignedbv_typet get_char_width() else assert(false); } -string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) +symbol_exprt string_constraint_generatort::fresh_univ_index(const irep_idt &prefix) { - unsignedbv_typet char_type; + return string_exprt::fresh_symbol(prefix,refined_string_typet::index_type()); +} - if(refined_string_typet::is_c_string_type(unrefined_string.type())) - char_type = refined_string_typet::char_type(); - else - char_type = refined_string_typet::java_char_type(); +symbol_exprt string_constraint_generatort::fresh_exist_index(const irep_idt &prefix) +{ + symbol_exprt s = string_exprt::fresh_symbol(prefix,refined_string_typet::index_type()); + index_symbols.push_back(s); + return s; +} +symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix) +{ + symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); + boolean_symbols.push_back(b); + return b; +} + + + +string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) +{ string_exprt s; - switch(unrefined_string.id()) - { - case ID_function_application: - s = of_function_application(to_function_application_expr(unrefined_string)); - else if(unrefined_string.id()==ID_symbol) - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string)); - else if(unrefined_string.id()==ID_address_of) { - assert(unrefined_string.op0().id()==ID_symbol); - s = get_string_of_symbol(symbol_to_string,to_symbol_expr(unrefined_string.op0())); - } - else if(unrefined_string.id()==ID_if) - s.of_if(to_if_expr(unrefined_string),symbol_to_string,axioms); - else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { - // We ignore non deterministic symbols and struct - } - default: - throw ("string_exprt of:\n" + unrefined_string.pretty() - + "\nwhich is not a function application, a symbol or an if expression"); + if(unrefined_string.id() == ID_function_application) + { + exprt res = function_application(to_function_application_expr(unrefined_string)); + assert(res.type() == refined_string_typet(get_char_type())); + s = to_string_expr(res); + } + else if(unrefined_string.id()==ID_symbol) + s = get_string_of_symbol(to_symbol_expr(unrefined_string)); + else if(unrefined_string.id()==ID_address_of) + { + assert(unrefined_string.op0().id()==ID_symbol); + s = get_string_of_symbol(to_symbol_expr(unrefined_string.op0())); + } + else if(unrefined_string.id()==ID_if) + s = string_if(to_if_expr(unrefined_string)); + else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { + // We ignore non deterministic symbols and struct + } + else + { + throw ("string_exprt of:\n" + unrefined_string.pretty() + + "\nwhich is not a function application, a symbol or an if expression"); } - axioms.emplace_back(s >= refined_string_typet::index_zero()); + axioms.emplace_back(s.longer(refined_string_typet::index_zero())); return s; } -string_exprt string_constraint_generatort::of_if(const if_exprt &expr) +string_exprt string_constraint_generatort::string_if(const if_exprt &expr) { + string_exprt res(get_char_type()); assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); string_exprt t = string_of_expr(expr.true_case()); assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); string_exprt f = string_of_expr(expr.false_case()); - axioms.emplace_back(expr.cond(),equal_exprt(length(),t.length())); - symbol_exprt qvar = fresh_symbol("string_if_true",refined_string_typet::index_type()); - axioms.push_back(string_constraintt(expr.cond(),equal_exprt((*this)[qvar],t[qvar])).forall(qvar,t.length())); + axioms.emplace_back(expr.cond(),res.same_length(t)); + symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); + axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar])).forall(qvar,t.length())); - axioms.emplace_back(not_exprt(expr.cond()),equal_exprt(length(),f.length())); - symbol_exprt qvar2 = fresh_symbol("string_if_false",refined_string_typet::index_type()); - axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt((*this)[qvar2],f[qvar2])).forall(qvar2,f.length())); -} - - -string_exprt string_constraint_generatort::get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym) { - if(refined_string_typet::is_c_string_type(sym.type())) { - irep_idt id = sym.get_identifier(); - std::map::iterator f = symbol_to_string.find(id); - if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(refined_string_typet::char_type()); - return symbol_to_string[id]; - } else return f->second; - } else { // otherwise we assume it is a java string - irep_idt id = sym.get_identifier(); - std::map::iterator f = symbol_to_string.find(id); - if(f == symbol_to_string.end()) { - symbol_to_string[id]= string_exprt(refined_string_typet::java_char_type()); - return symbol_to_string[id]; - } else return f->second; - } + axioms.emplace_back(not_exprt(expr.cond()),res.same_length(f)); + symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); + axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt(res[qvar2],f[qvar2])).forall(qvar2,f.length())); + return res; +} + + +string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exprt & sym) +{ + irep_idt id = sym.get_identifier(); + std::map::iterator f = symbol_to_string.find(id); + if(f != symbol_to_string.end()) + return f->second; + symbol_to_string[id]= string_exprt(get_char_type()); + return symbol_to_string[id]; } string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & sym) @@ -133,16 +155,16 @@ string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & { assert(false); // is this branch used ? string_exprt s; - s = generator.of_string_constant(string_exprt::extract_java_string(sym),JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); + s = string_constant(string_exprt::extract_java_string(sym),JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); return s; } else { - return string_exprt::get_string_of_symbol(symbol_to_string,sym); + return get_string_of_symbol(sym); } } -string_exprt string_constraint_generatort::function_application(const function_application_exprt & expr) +exprt string_constraint_generatort::function_application(const function_application_exprt & expr) { const exprt &name = expr.function(); @@ -152,125 +174,124 @@ string_exprt string_constraint_generatort::function_application(const function_a || starts_with(id,cprover_string_concat_func) || starts_with(id,cprover_string_substring_func) || starts_with(id,cprover_string_char_set_func)) { - string_exprt str = generator.make_string(expr); - bvt bv = convert_bv(str); - return bv; - } else if (starts_with(id,cprover_char_literal_func)) { + string_exprt str = string_of_expr(expr); + return str; + } else if (starts_with(id,cprover_char_literal_func)) return char_literal(expr); - } else if (starts_with(id,cprover_string_length_func)) { - return generator.string_length(expr); - } else if (starts_with(id,cprover_string_equal_func)) { - return generator.string_equal(expr); - } else if (starts_with(id,cprover_string_equals_ignore_case_func)) { - return generator.string_equals_ignore_case(expr); - } else if (starts_with(id,cprover_string_is_empty_func)) { - return generator.string_is_empty(expr); - } else if (starts_with(id,cprover_string_char_at_func)) { - return generator.string_char_at(expr); - } else if (starts_with(id,cprover_string_is_prefix_func)) { - return generator.string_is_prefix(expr); - } else if (starts_with(id,cprover_string_is_suffix_func)) { - return generator.string_is_suffix(expr); - } else if (starts_with(id,cprover_string_startswith_func)) { - return generator.string_is_prefix(expr,true); - } else if (starts_with(id,cprover_string_endswith_func)) { - return generator.string_is_suffix(expr,true); - } else if (starts_with(id,cprover_string_contains_func)) { - return generator.string_contains(expr); - } else if (starts_with(id,cprover_string_hash_code_func)) { - return generator.string_hash_code(expr); - } else if (starts_with(id,cprover_string_index_of_func)) { - return generator.string_index_of(expr); - } else if (starts_with(id,cprover_string_last_index_of_func)) { - return generator.string_last_index_of(expr); - } else if (starts_with(id,cprover_string_parse_int_func)) { - return generator.string_parse_int(expr); - } else if (starts_with(id,cprover_string_to_char_array_func)) { - return generator.string_to_char_array(expr); - } else if (starts_with(id,cprover_string_code_point_at_func)) { - return generator.string_code_point_at(expr); - } else if (starts_with(id,cprover_string_code_point_before_func)) { - return generator.string_code_point_before(expr); - } else if (starts_with(id,cprover_string_code_point_count_func)) { - return generator.string_code_point_count(expr); - } else if (starts_with(id,cprover_string_offset_by_code_point_func)) { - return generator.string_offset_by_code_point(expr); - } else if (starts_with(id,cprover_string_compare_to_func)) { - return generator.string_compare_to(expr); - } else if(starts_with(id,cprover_string_literal_func)) - return of_string_literal(expr,axioms); + else if (starts_with(id,cprover_string_length_func)) + return string_length(expr); + else if (starts_with(id,cprover_string_equal_func)) + return string_equal(expr); + else if (starts_with(id,cprover_string_equals_ignore_case_func)) + return string_equals_ignore_case(expr); + else if (starts_with(id,cprover_string_is_empty_func)) + return string_is_empty(expr); + else if (starts_with(id,cprover_string_char_at_func)) + return string_char_at(expr); + else if (starts_with(id,cprover_string_is_prefix_func)) + return string_is_prefix(expr); + else if (starts_with(id,cprover_string_is_suffix_func)) + return string_is_suffix(expr); + else if (starts_with(id,cprover_string_startswith_func)) + return string_is_prefix(expr,true); + else if (starts_with(id,cprover_string_endswith_func)) + return string_is_suffix(expr,true); + else if (starts_with(id,cprover_string_contains_func)) + return string_contains(expr); + else if (starts_with(id,cprover_string_hash_code_func)) + return string_hash_code(expr); + else if (starts_with(id,cprover_string_index_of_func)) + return string_index_of(expr); + else if (starts_with(id,cprover_string_last_index_of_func)) + return string_last_index_of(expr); + else if (starts_with(id,cprover_string_parse_int_func)) + return string_parse_int(expr); + else if (starts_with(id,cprover_string_to_char_array_func)) + return string_to_char_array(expr); + else if (starts_with(id,cprover_string_code_point_at_func)) + return string_code_point_at(expr); + else if (starts_with(id,cprover_string_code_point_before_func)) + return string_code_point_before(expr); + else if (starts_with(id,cprover_string_code_point_count_func)) + return string_code_point_count(expr); + else if (starts_with(id,cprover_string_offset_by_code_point_func)) + return string_offset_by_code_point(expr); + else if (starts_with(id,cprover_string_compare_to_func)) + return string_compare_to(expr); + else if(starts_with(id,cprover_string_literal_func)) + return string_literal(expr); else if(starts_with(id,cprover_string_concat_func)) - return of_string_concat(expr,symbol_to_string,axioms); + return string_concat(expr); else if(starts_with(id,cprover_string_concat_int_func)) - return of_string_concat_int(expr,symbol_to_string,axioms); + return string_concat_int(expr); else if(starts_with(id,cprover_string_concat_long_func)) - return of_string_concat_long(expr,symbol_to_string,axioms); + return string_concat_long(expr); else if(starts_with(id,cprover_string_concat_bool_func)) - return of_string_concat_bool(expr,symbol_to_string,axioms); + return string_concat_bool(expr); else if(starts_with(id,cprover_string_concat_char_func)) - return of_string_concat_char(expr,symbol_to_string,axioms); + return string_concat_char(expr); else if(starts_with(id,cprover_string_concat_double_func)) - return of_string_concat_double(expr,symbol_to_string,axioms); + return string_concat_double(expr); else if(starts_with(id,cprover_string_concat_float_func)) - return of_string_concat_float(expr,symbol_to_string,axioms); + return string_concat_float(expr); else if(starts_with(id,cprover_string_concat_code_point_func)) - return of_string_concat_code_point(expr,symbol_to_string,axioms); + return string_concat_code_point(expr); else if(starts_with(id,cprover_string_insert_func)) - return of_string_insert(expr,symbol_to_string,axioms); + return string_insert(expr); else if(starts_with(id,cprover_string_insert_int_func)) - return of_string_insert_int(expr,symbol_to_string,axioms); + return string_insert_int(expr); else if(starts_with(id,cprover_string_insert_long_func)) - return of_string_insert_long(expr,symbol_to_string,axioms); + return string_insert_long(expr); else if(starts_with(id,cprover_string_insert_bool_func)) - return of_string_insert_bool(expr,symbol_to_string,axioms); + return string_insert_bool(expr); else if(starts_with(id,cprover_string_insert_char_func)) - return of_string_insert_char(expr,symbol_to_string,axioms); + return string_insert_char(expr); else if(starts_with(id,cprover_string_insert_double_func)) - return of_string_insert_double(expr,symbol_to_string,axioms); + return string_insert_double(expr); else if(starts_with(id,cprover_string_insert_float_func)) - return of_string_insert_float(expr,symbol_to_string,axioms); + return string_insert_float(expr); else if(starts_with(id,cprover_string_substring_func)) - return of_string_substring(expr,symbol_to_string,axioms); + return string_substring(expr); else if(starts_with(id,cprover_string_trim_func)) - return of_string_trim(expr,symbol_to_string,axioms); + return string_trim(expr); else if(starts_with(id,cprover_string_to_lower_case_func)) - return of_string_to_lower_case(expr,symbol_to_string,axioms); + return string_to_lower_case(expr); else if(starts_with(id,cprover_string_to_upper_case_func)) - return of_string_to_upper_case(expr,symbol_to_string,axioms); + return string_to_upper_case(expr); else if(starts_with(id,cprover_string_char_set_func)) - return of_string_char_set(expr,symbol_to_string,axioms); + return string_char_set(expr); else if(starts_with(id,cprover_string_value_of_func)) - return of_string_value_of(expr,axioms); + return string_value_of(expr); else if(starts_with(id,cprover_string_empty_string_func)) - return of_empty_string(expr,axioms); + return empty_string(expr); else if(starts_with(id,cprover_string_copy_func)) - return of_string_copy(expr,symbol_to_string,axioms); + return string_copy(expr); else if(starts_with(id,cprover_string_of_int_func)) - return of_int(expr,axioms); + return of_int(expr); else if(starts_with(id,cprover_string_of_int_hex_func)) - return of_int_hex(expr,axioms); + return of_int_hex(expr); else if(starts_with(id,cprover_string_of_float_func)) - return of_float(expr,axioms); + return of_float(expr); else if(starts_with(id,cprover_string_of_double_func)) - return of_double(expr,axioms); + return of_double(expr); else if(starts_with(id,cprover_string_of_long_func)) - return of_long(expr,axioms); + return of_long(expr); else if(starts_with(id,cprover_string_of_bool_func)) - return of_bool(expr,axioms); + return of_bool(expr); else if(starts_with(id,cprover_string_of_char_func)) - return of_char(expr,axioms); + return of_char(expr); else if(starts_with(id,cprover_string_set_length_func)) - return of_string_set_length(expr,symbol_to_string,axioms); + return string_set_length(expr); else if(starts_with(id,cprover_string_delete_func)) - return of_string_delete(expr,symbol_to_string,axioms); + return string_delete(expr); else if(starts_with(id,cprover_string_delete_char_at_func)) - return of_string_delete_char_at(expr,symbol_to_string,axioms); + return string_delete_char_at(expr); else if(starts_with(id,cprover_string_replace_func)) - return of_string_replace(expr,symbol_to_string,axioms); + return string_replace(expr); else if(starts_with(id,cprover_string_format_func)) - return of_string_format(expr,symbol_to_string,axioms); + return string_format(expr); else { - std::string msg("string_exprt::of_function_application: unknown symbol :"); + std::string msg("string_exprt::function_application: unknown symbol :"); msg+=id.c_str(); throw msg; } @@ -280,14 +301,16 @@ string_exprt string_constraint_generatort::function_application(const function_a -irep_idt string_constraint_generatort::extract_java_string(const symbol_exprt & s){ +irep_idt extract_java_string(const symbol_exprt & s) +{ std::string tmp(s.get(ID_identifier).c_str()); std::string value = tmp.substr(31); return irep_idt(value); } -string_exprt string_constraint_generatort::of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms){ +string_exprt string_constraint_generatort::string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type){ + string_exprt res(char_type); std::string str = sval.c_str(); // should only do this for java std::wstring utf16 = utf8_to_utf16(str); @@ -301,26 +324,30 @@ string_exprt string_constraint_generatort::of_string_constant(irep_idt sval, int std::string sval_binary=integer2binary((unsigned)big_endian, char_width); constant_exprt c(sval_binary,char_type); - equal_exprt lemma(index_exprt(content(), idx), c); + equal_exprt lemma(res[idx], c); axioms.emplace_back(lemma,true); } std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); - axioms.emplace_back(equal_exprt(length(),s_length)); + axioms.emplace_back(res.has_length(s_length)); + return res; } -string_exprt string_constraint_generatort::of_empty_string(const function_application_exprt &f, axiom_vect & axioms) +string_exprt string_constraint_generatort::empty_string(const function_application_exprt &f) { assert(f.arguments().size() == 0); - axioms.emplace_back(equal_exprt(length(),refined_string_typet::index_zero())); + string_exprt res(get_char_type()); + axioms.emplace_back(res.has_length(0)); + return res; } -string_exprt string_constraint_generatort::of_string_literal(const function_application_exprt &f, axiom_vect & axioms) +string_exprt string_constraint_generatort::string_literal(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string literal? + const exprt &arg = args[0]; irep_idt sval; @@ -350,311 +377,263 @@ string_exprt string_constraint_generatort::of_string_literal(const function_appl char_type = refined_string_typet::java_char_type(); } - of_string_constant(sval,char_width,char_type,axioms); + return string_constant(sval,char_width,char_type); } -string_exprt string_constraint_generatort::of_string_concat(const string_exprt & s1, const string_exprt & s2, axiom_vect & axioms) { - equal_exprt length_sum_lem(length(), plus_exprt(s1.length(), s2.length())); +string_exprt string_constraint_generatort::string_concat(const string_exprt & s1, const string_exprt & s2) +{ + // |res| = |s1| + |s2| + string_exprt res(get_char_type()); + equal_exprt length_sum_lem = res.has_length(plus_exprt(s1.length(), s2.length())); axioms.emplace_back(length_sum_lem); - symbol_exprt idx = fresh_symbol("QA_index_concat",refined_string_typet::index_type()); - - string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + // forall i<|s1|. res[i] = s1[i] + symbol_exprt idx = fresh_univ_index("QA_index_concat"); + string_constraintt a1(equal_exprt(s1[idx],res[idx])); axioms.push_back(a1.forall(idx, s1.length())); - - symbol_exprt idx2 = fresh_symbol("QA_index_concat2",refined_string_typet::index_type()); - - string_constraintt a2(equal_exprt(s2[idx2],(*this)[plus_exprt(idx2,s1.length())])); + // forall i<|s2|. res[i+|s1|] = s2[i] + symbol_exprt idx2 = fresh_univ_index("QA_index_concat2"); + string_constraintt a2(equal_exprt(s2[idx2],res[plus_exprt(idx2,s1.length())])); axioms.push_back(a2.forall(idx2, s2.length())); + + return res; } -string_exprt string_constraint_generatort::of_string_concat(const function_application_exprt &f) + +string_exprt string_constraint_generatort::string_concat(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string concat + assert(args.size() == 2); string_exprt s1 = string_of_expr(args[0]); string_exprt s2 = string_of_expr(args[1]); - of_string_concat(s1, s2, axioms); + return string_concat(s1, s2); } - -string_exprt string_constraint_generatort::of_string_copy(const function_application_exprt &f) +string_exprt string_constraint_generatort::string_copy(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - - string_exprt s1 = string_of_expr(args[0]); - axioms.emplace_back(equal_exprt(length(), s1.length())); - symbol_exprt idx = fresh_symbol("QA_index_copy",refined_string_typet::index_type()); - string_constraintt a1(equal_exprt(s1[idx],(*this)[idx])); + string_exprt s1 = string_of_expr(args(f,1)[0]); + string_exprt res(get_char_type()); + axioms.emplace_back(res.same_length(s1)); + symbol_exprt idx = fresh_univ_index("QA_index_copy"); + string_constraintt a1(equal_exprt(s1[idx],res[idx])); axioms.push_back(a1.forall(idx, s1.length())); + return res; } -string_exprt string_constraint_generatort::of_string_set_length(const function_application_exprt &f) +string_exprt string_constraint_generatort::string_set_length(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - - bool is_c_string = refined_string_typet::is_c_string_type(f.type()); - exprt null_char; - if(is_c_string) null_char = constant_char(0); - else null_char = constant_java_char(0); - - string_exprt s1 = string_of_expr(args[0]); + string_exprt s1 = string_of_expr(args(f,2)[0]); + exprt k = args(f,2)[1]; + string_exprt res(get_char_type()); // |s| = k - // && forall i < |s|. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) - - axioms.emplace_back(equal_exprt(length(), args[1])); - symbol_exprt idx = fresh_symbol("QA_index_set_length",refined_string_typet::index_type()); + // && forall i < k. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) - + axioms.emplace_back(res.has_length(k)); + symbol_exprt idx = fresh_univ_index("QA_index_set_length"); string_constraintt a1 - (and_exprt(implies_exprt(s1 > idx, equal_exprt(s1[idx],(*this)[idx])), - implies_exprt(s1 <= idx, equal_exprt(s1[idx],null_char)))); - axioms.push_back(a1.forall(idx, length())); -} + (and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), + implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); + axioms.push_back(a1.forall(idx, k)); + return res; +} -string_exprt string_constraint_generatort::of_java_char_array(const exprt & char_array, axiom_vect & axioms) +string_exprt string_constraint_generatort::java_char_array(const exprt & char_array) { + string_exprt res(get_char_type()); exprt arr = to_address_of_expr(char_array).object(); - exprt len = member_exprt(arr, "length",length().type()); - exprt cont = member_exprt(arr, "data",content().type()); - op0() = len; - op1() = cont; + exprt len = member_exprt(arr, "length",res.length().type()); + exprt cont = member_exprt(arr, "data",res.content().type()); + res.op0() = len; + res.op1() = cont; + return res; } -string_exprt string_constraint_generatort::of_string_value_of(const function_application_exprt &f, axiom_vect & axioms) +string_exprt string_constraint_generatort::string_value_of(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); if(args.size() == 3) { + string_exprt res(get_char_type()); exprt char_array = args[0]; exprt offset = args[1]; exprt count = args[2]; - string_exprt str(refined_string_typet::java_char_type()); - str.of_java_char_array(args[0],axioms); - axioms.emplace_back(equal_exprt(length(), count)); - - symbol_exprt idx = fresh_symbol("QA_index_value_of",refined_string_typet::index_type()); - string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],(*this)[idx])); - axioms.push_back(a1.forall(idx, count)); + string_exprt str = java_char_array(char_array); + axioms.emplace_back(res.has_length(count)); + symbol_exprt idx = fresh_univ_index("QA_index_value_of"); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],res[idx])); + axioms.push_back(a1.forall(idx, count)); + return res; } else { assert(args.size() == 1); - of_java_char_array(args[0],axioms); + return java_char_array(args[0]); } } -string_exprt string_constraint_generatort::of_string_substring -(const function_application_exprt &expr) +string_exprt string_constraint_generatort::string_substring +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() >= 2); - - string_exprt str = string_of_expr(args[0]); - - exprt i(args[1]); - + assert(f.arguments().size() >= 2); + string_exprt str = string_of_expr(f.arguments()[0]); + exprt i(f.arguments()[1]); exprt j; - if(args.size() == 3) j = args[2]; - else j = str.length(); - - of_string_substring(str,i,j,symbol_to_string,axioms); + if(f.arguments().size() == 3) j = f.arguments()[2]; + else { assert(f.arguments().size() == 2); j = str.length(); } + return string_substring(str,i,j); } -string_exprt string_constraint_generatort::of_string_substring +string_exprt string_constraint_generatort::string_substring (const string_exprt & str, const exprt & start, const exprt & end) { - symbol_exprt idx = fresh_symbol("index_substring", refined_string_typet::index_type()); + symbol_exprt idx = fresh_exist_index("index_substring"); assert(start.type() == refined_string_typet::index_type()); assert(end.type() == refined_string_typet::index_type()); + string_exprt res(get_char_type()); - axioms.emplace_back(equal_exprt(length(), minus_exprt(end, start))); - axioms.emplace_back(binary_relation_exprt(start, ID_lt, end)); - axioms.emplace_back(str >= end); + axioms.emplace_back(binary_relation_exprt(start, ID_lt, end),res.has_length(minus_exprt(end, start))); + axioms.emplace_back(binary_relation_exprt(start, ID_ge, end),res.has_length(refined_string_typet::index_zero())); + // Warning: check what to do if the string is not long enough + axioms.emplace_back(str.longer(end)); // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt((*this)[idx], str[plus_exprt(start, idx)])); - - axioms.push_back(a.forall(idx,length())); + string_constraintt a(equal_exprt(res[idx], str[plus_exprt(start, idx)])); + axioms.push_back(a.forall(idx,res.length())); + return res; } -string_exprt string_constraint_generatort::of_string_trim +string_exprt string_constraint_generatort::string_trim (const function_application_exprt &expr) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - string_exprt str = string_of_expr(args[0]); - symbol_exprt idx = fresh_symbol("index_trim", refined_string_typet::index_type()); - - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt space_char = is_c_string ? constant_char(32) : constant_java_char(32); + string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt res(get_char_type()); + symbol_exprt idx = fresh_exist_index("index_trim"); + exprt space_char = constant_char(32); // m + |s1| <= |str| - axioms.emplace_back(str >= plus_exprt(idx, length())); + axioms.emplace_back(str.longer(plus_exprt(idx, res.length()))); axioms.emplace_back(binary_relation_exprt(idx, ID_ge, refined_string_typet::index_zero())); - axioms.emplace_back(str >= idx); - axioms.emplace_back(str >= length()); - ///axioms.emplace_back(binary_relation_exprt(length(), ID_gt, index_zero)); + axioms.emplace_back(str.longer(idx)); + axioms.emplace_back(res.longer(refined_string_typet::index_zero())); - symbol_exprt n = fresh_symbol("QA_index_trim",refined_string_typet::index_type()); + symbol_exprt n = fresh_univ_index("QA_index_trim"); // forall n < m, str[n] = ' ' string_constraintt a(equal_exprt(str[n], space_char)); axioms.push_back(a.forall(n,idx)); - symbol_exprt n2 = fresh_symbol("QA_index_trim2",refined_string_typet::index_type()); + symbol_exprt n2 = fresh_univ_index("QA_index_trim2"); // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' - string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(length(),n2))], space_char)); - axioms.push_back(a1.forall(n2,minus_exprt(str.length(),plus_exprt(idx,length())))); + string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(res.length(),n2))], space_char)); + axioms.push_back(a1.forall(n2,minus_exprt(str.length(),plus_exprt(idx,res.length())))); - symbol_exprt n3 = fresh_symbol("QA_index_trim3",refined_string_typet::index_type()); + symbol_exprt n3 = fresh_univ_index("QA_index_trim3"); // forall n < |s1|, s[idx+n] = s1[n] - string_constraintt a2(equal_exprt((*this)[n3], str[plus_exprt(n3, idx)])); - axioms.push_back(a2.forall(n3,length())); + string_constraintt a2(equal_exprt(res[n3], str[plus_exprt(n3, idx)])); + axioms.push_back(a2.forall(n3,res.length())); // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| or_exprt m_index_condition(equal_exprt(idx,str.length()), and_exprt (not_exprt(equal_exprt(str[idx],space_char)), - not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,length()),refined_string_typet::index_of_int(1))],space_char)))); + not_exprt(equal_exprt(str[minus_exprt(plus_exprt(idx,res.length()),refined_string_typet::index_of_int(1))],space_char)))); axioms.push_back(m_index_condition); + return res; } -string_exprt string_constraint_generatort::of_string_to_lower_case +string_exprt string_constraint_generatort::string_to_lower_case (const function_application_exprt &expr) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = string_of_expr(args[0]); - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt char_a; - exprt char_A; - exprt char_z; - exprt char_Z; - if(is_c_string) { - char_a = constant_char(97); - char_A = constant_char(65); - char_z = constant_char(122); - char_Z = constant_char(90); - } else { - char_a = constant_char(97); - char_A = constant_char(65); - char_z = constant_char(122); - char_Z = constant_char(90); - } + string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt res(get_char_type()); + exprt char_a = constant_char(97); + exprt char_A = constant_char(65); + exprt char_z = constant_char(122); + exprt char_Z = constant_char(90); - axioms.emplace_back(equal_exprt(length(), str.length())); + axioms.emplace_back(res.same_length(str)); - symbol_exprt idx = fresh_symbol("QA_lower_case",refined_string_typet::index_type()); + symbol_exprt idx = fresh_univ_index("QA_lower_case"); // forall idx < str.length, this[idx] = 'A'<=str[idx]<='Z' ? str[idx]+'a'-'A' : str[idx] exprt is_upper_case = and_exprt(binary_relation_exprt(char_A,ID_le,str[idx]), binary_relation_exprt(str[idx],ID_le,char_Z)); - equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); - equal_exprt eq((*this)[idx], str[idx]); + equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); + equal_exprt eq(res[idx], str[idx]); string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); - axioms.push_back(a.forall(idx,length())); + axioms.push_back(a.forall(idx,res.length())); + return res; } -string_exprt string_constraint_generatort::of_string_to_upper_case +string_exprt string_constraint_generatort::string_to_upper_case (const function_application_exprt &expr) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = string_of_expr(args[0]); - bool is_c_string = refined_string_typet::is_c_string_type(expr.type()); - exprt char_a; - exprt char_A; - exprt char_z; - exprt char_Z; - - if(is_c_string) { - char_a = constant_char(97); - char_A = constant_char(65); - char_z = constant_char(122); - char_Z = constant_char(90); - } else { - char_a = constant_char(97); - char_A = constant_char(65); - char_z = constant_char(122); - char_Z = constant_char(90); - } + string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt res(get_char_type()); + exprt char_a = constant_char(97); + exprt char_A = constant_char(65); + exprt char_z = constant_char(122); + exprt char_Z = constant_char(90); - axioms.emplace_back(equal_exprt(length(), str.length())); + axioms.emplace_back(res.same_length(str)); - symbol_exprt idx = fresh_symbol("QA_upper_case",refined_string_typet::index_type()); + symbol_exprt idx = fresh_univ_index("QA_upper_case"); // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] exprt is_lower_case = and_exprt(binary_relation_exprt(char_a,ID_le,str[idx]), binary_relation_exprt(str[idx],ID_le,char_z)); - equal_exprt convert((*this)[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); - equal_exprt eq((*this)[idx], str[idx]); + equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); + equal_exprt eq(res[idx], str[idx]); string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); - axioms.push_back(a.forall(idx,length())); + axioms.push_back(a.forall(idx,res.length())); + return res; } string_exprt string_constraint_generatort::of_int -(const function_application_exprt &expr,axiom_vect & axioms) -{ - assert(expr.arguments().size() == 1); - of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),10); -} +(const function_application_exprt &expr) +{ return of_int(args(expr,1)[0],10); } string_exprt string_constraint_generatort::of_long -(const function_application_exprt &expr,axiom_vect & axioms) -{ - assert(expr.arguments().size() == 1); - of_int(expr.arguments()[0],axioms,refined_string_typet::is_c_string_type(expr.type()),30); -} - +(const function_application_exprt &expr) +{ return of_int(args(expr,1)[0],30); } string_exprt string_constraint_generatort::of_float -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),false); -} +(const function_application_exprt &f) +{ return of_float(args(f,1)[0],false); } + +string_exprt string_constraint_generatort::of_double +(const function_application_exprt &f) +{ return of_float(args(f,1)[0],true); } string_exprt string_constraint_generatort::of_float -(const exprt &f, axiom_vect & axioms, bool is_c_string, bool double_precision) +(const exprt &f, bool double_precision) { // Warning: we currently only have partial specification - unsignedbv_typet char_type; - int char_width; - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } + unsignedbv_typet char_type = get_char_type(); + size_t char_width = get_char_width(); - axioms.emplace_back(binary_relation_exprt(length(), ID_le, refined_string_typet::index_of_int(24))); + string_exprt res(char_type); + axioms.emplace_back(res.shorter(refined_string_typet::index_of_int(24))); string_exprt magnitude(char_type); string_exprt sign_string(char_type); // If the argument is NaN, the result is the string "NaN". - string_exprt nan_string(char_type); - nan_string.of_string_constant("NaN",char_width,char_type,axioms); + string_exprt nan_string = string_constant("NaN",char_width,char_type); ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); exprt isnan = float_bvt().isnan(f,fspec); - axioms.emplace_back(isnan, equal_exprt(magnitude.length(),nan_string.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_nan", refined_string_typet::index_type()); + axioms.emplace_back(isnan, magnitude.same_length(nan_string)); + symbol_exprt qvar = fresh_univ_index("QA_equal_nan"); axioms.push_back (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) ).forall(qvar,nan_string.length())); @@ -665,34 +644,32 @@ string_exprt string_constraint_generatort::of_float unsigned width=bv_type.get_width(); exprt isneg = extractbit_exprt(f, width-1); - axioms.emplace_back(isneg, equal_exprt(sign_string.length(),refined_string_typet::index_of_int(1))); + axioms.emplace_back(isneg, sign_string.has_length(refined_string_typet::index_of_int(1))); - axioms.emplace_back(not_exprt(isneg), equal_exprt(sign_string.length(),refined_string_typet::index_of_int(0))); - axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_char(0x2D); - + axioms.emplace_back(not_exprt(isneg), sign_string.has_length(refined_string_typet::index_of_int(0))); + axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_char(0x2D))); // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". - - string_exprt infinity_string(char_type); - infinity_string.of_string_constant("Infinity",char_width,char_type,axioms); + + string_exprt infinity_string = string_constant("Infinity",char_width,char_type); exprt isinf = float_bvt().isinf(f,fspec); - axioms.emplace_back(isinf, equal_exprt(magnitude.length(),infinity_string.length())); - symbol_exprt qvar_inf = string_exprt::fresh_symbol("qvar_equal_infinity", refined_string_typet::index_type()); + axioms.emplace_back(isinf, magnitude.same_length(infinity_string)); + symbol_exprt qvar_inf = fresh_univ_index("QA_equal_infinity"); axioms.push_back (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) ).forall(qvar_inf,infinity_string.length())); //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". - string_exprt zero_string(char_type); - zero_string.of_string_constant("0.0",char_width,char_type,axioms); + string_exprt zero_string = string_constant("0.0",char_width,char_type); exprt iszero = float_bvt().is_zero(f,fspec); - axioms.emplace_back(iszero, equal_exprt(magnitude.length(),zero_string.length())); - symbol_exprt qvar_zero = string_exprt::fresh_symbol("qvar_equal_zero", refined_string_typet::index_type()); + axioms.emplace_back(iszero, magnitude.same_length(zero_string)); + symbol_exprt qvar_zero = fresh_univ_index("QA_equal_zero"); axioms.push_back (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) ).forall(qvar_zero,zero_string.length())); + return string_concat(sign_string,magnitude); /* ieee_floatt milli(fspec); @@ -721,9 +698,6 @@ string_exprt string_constraint_generatort::of_float How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ - of_string_concat(sign_string,magnitude,axioms); - - /* exprt char_0 = constant_of_nat(48,char_width,char_type); exprt char_9 = constant_of_nat(57,char_width,char_type); @@ -738,609 +712,410 @@ string_exprt string_constraint_generatort::of_float ); string_constraintt a(is_digit);*/ //axioms.push_back(a.forall(idx,index_zero,length())); - - } -string_exprt string_constraint_generatort::of_double -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_float(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type()),true); -} + string_exprt string_constraint_generatort::of_bool -(const function_application_exprt &f,axiom_vect & axioms) +(const function_application_exprt &f) { - assert(f.arguments().size() == 1); - of_bool(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); - + return of_bool(args(f,1)[0]); } -string_exprt string_constraint_generatort::of_bool -(const exprt &i,axiom_vect & axioms,bool is_c_string) + +string_exprt string_constraint_generatort::of_bool(const exprt &i) { - unsignedbv_typet char_type; - int char_width; - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } + unsignedbv_typet char_type = get_char_type(); + int char_width = get_char_width(); + string_exprt res(char_type); assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); typecast_exprt eq(i,bool_typet()); - string_exprt true_string(char_type); - string_exprt false_string(char_type); - true_string.of_string_constant("true",char_width,char_type,axioms); - false_string.of_string_constant("false",char_width,char_type,axioms); + string_exprt true_string = string_constant("true",char_width,char_type); + string_exprt false_string = string_constant("false",char_width,char_type); - axioms.emplace_back(eq, equal_exprt(length(),true_string.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_true", refined_string_typet::index_type()); + axioms.emplace_back(eq, res.same_length(true_string)); + symbol_exprt qvar = fresh_univ_index("QA_equal_true"); axioms.push_back - (string_constraintt(eq,equal_exprt((*this)[qvar],true_string[qvar]) + (string_constraintt(eq,equal_exprt(res[qvar],true_string[qvar]) ).forall(qvar,true_string.length())); - axioms.emplace_back(not_exprt(eq), equal_exprt(length(),false_string.length())); - symbol_exprt qvar1 = string_exprt::fresh_symbol("qvar_equal_false", refined_string_typet::index_type()); + axioms.emplace_back(not_exprt(eq), res.same_length(false_string)); + symbol_exprt qvar1 = fresh_univ_index("QA_equal_false"); axioms.push_back - (string_constraintt(not_exprt(eq),equal_exprt((*this)[qvar1],false_string[qvar1]) + (string_constraintt(not_exprt(eq),equal_exprt(res[qvar1],false_string[qvar1]) ).forall(qvar,false_string.length())); - - + return res; } string_exprt string_constraint_generatort::of_int -(const exprt &i,axiom_vect & axioms,bool is_c_string, int max_size) +(const exprt &i, size_t max_size) { + string_exprt res(get_char_type()); typet type = i.type(); int width = type.get_unsigned_int(ID_width); - exprt ten = constant_of_nat(10,width,type); - exprt zero_char; - exprt nine_char; - exprt minus_char; - - if(is_c_string) { - minus_char = constant_char(45); - zero_char = constant_char(48); - nine_char = constant_char(57); - } else { - minus_char = constant_char(45); - zero_char = constant_char(48); - nine_char = constant_char(57); - } + exprt ten = constant_unsigned(10,width); + exprt zero_char = constant_char(48); + exprt nine_char = constant_char(57); + exprt minus_char = constant_char(45); - axioms.emplace_back(and_exprt(*this > refined_string_typet::index_zero(),*this <= refined_string_typet::index_of_int(max_size))); - exprt chr = (*this)[refined_string_typet::index_zero()]; + axioms.emplace_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), + res.shorter(refined_string_typet::index_of_int(max_size)))); + + exprt chr = res[0]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_digit = and_exprt (binary_relation_exprt(chr,ID_ge,zero_char), binary_relation_exprt(chr,ID_le,nine_char)); axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); - for(unsigned size=1; size<=max_size;size++) { - exprt sum = constant_of_nat(0,width,type); - exprt all_numbers = true_exprt(); - chr = (*this)[refined_string_typet::index_of_int(0)]; - exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(unsigned j=1; j1) { + equal_exprt premise = res.has_length(size); axioms.emplace_back(and_exprt(premise,starts_with_digit), - not_exprt(equal_exprt((*this)[refined_string_typet::index_zero()],zero_char))); + and_exprt(equal_exprt(i,plus_exprt(sum,first_value)), + all_numbers)); + axioms.emplace_back(and_exprt(premise,starts_with_minus), - not_exprt(equal_exprt((*this)[refined_string_typet::index_of_int(1)],zero_char))); - } - - //we have to be careful when exceeding the maximal size of integers - // Warning this should be different depending on max size - if(size == max_size) { - exprt smallest_with_10_digits = constant_of_nat(1000000000,width,type); - axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); + and_exprt(equal_exprt(i,unary_minus_exprt(sum)), + all_numbers)); + //disallow 0s at the beggining + if(size>1) + { + axioms.emplace_back(and_exprt(premise,starts_with_digit), + not_exprt(equal_exprt(res[refined_string_typet::index_zero()],zero_char))); + axioms.emplace_back(and_exprt(premise,starts_with_minus), + not_exprt(equal_exprt(res[refined_string_typet::index_of_int(1)],zero_char))); + } + + //we have to be careful when exceeding the maximal size of integers + // Warning this should be different depending on max size + if(size == max_size) + { + exprt smallest_with_10_digits = constant_unsigned(1000000000,width); + axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); + } } - } + return res; } -exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { - exprt zero_char = constant_of_nat(48,char_width,char_type); - exprt nine_char = constant_of_nat(57,char_width,char_type); - exprt a_char = constant_of_nat(0x61,char_width,char_type); +exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_width, typet char_type) +{ + exprt zero_char = constant_char(48); + exprt nine_char = constant_char(57); + exprt a_char = constant_char(0x61); return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), - minus_exprt(chr,constant_of_nat(0x61 - 10,char_width,char_type)), + minus_exprt(chr,constant_char(0x61 - 10)), minus_exprt(chr,zero_char)); } -string_exprt string_constraint_generatort::of_int_hex -(const exprt &i,axiom_vect & axioms,bool is_c_string) +string_exprt string_constraint_generatort::of_int_hex(const exprt &i) { + string_exprt res(get_char_type()); typet type = i.type(); int width = type.get_unsigned_int(ID_width); - exprt sixteen = constant_of_nat(16,width,type); - typet char_type; - unsigned char_width; - - if(is_c_string) { - char_type = refined_string_typet::char_type(); - char_width = STRING_SOLVER_CHAR_WIDTH; - } else { - char_type = refined_string_typet::java_char_type(); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - } - - exprt minus_char = constant_of_nat(45,char_width,char_type); - exprt zero_char = constant_of_nat(48,char_width,char_type); - exprt nine_char = constant_of_nat(57,char_width,char_type); - exprt a_char = constant_of_nat(0x61,char_width,char_type); - exprt f_char = constant_of_nat(0x66,char_width,char_type); - - int max_size = 8; - axioms.emplace_back(and_exprt(*this > refined_string_typet::index_zero(),*this <= refined_string_typet::index_of_int(max_size))); - - for(int size=1; size<=max_size;size++) { - exprt sum = constant_of_nat(0,width,type); - exprt all_numbers = true_exprt(); - exprt chr = (*this)[refined_string_typet::index_of_int(0)]; - - for(int j=0; j1) { - axioms.emplace_back(premise, - not_exprt(equal_exprt((*this)[refined_string_typet::index_zero()],zero_char))); + for(size_t j=0; j1) + axioms.emplace_back(premise, not_exprt(equal_exprt(res[0],zero_char))); } - - } + return res; } string_exprt string_constraint_generatort::of_int_hex -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_int_hex(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); -} +(const function_application_exprt &f) +{ return of_int_hex(args(f,1)[0]); } string_exprt string_constraint_generatort::of_char -(const function_application_exprt &f,axiom_vect & axioms) -{ - assert(f.arguments().size() == 1); - of_char(f.arguments()[0],axioms,refined_string_typet::is_c_string_type(f.type())); - -} +(const function_application_exprt &f) +{ return of_char(args(f,1)[0]); } -string_exprt string_constraint_generatort::of_char -(const exprt &c, axiom_vect & axioms, bool is_c_string) +string_exprt string_constraint_generatort::of_char(const exprt &c) { - and_exprt lemma(equal_exprt((*this)[refined_string_typet::index_of_int(0)], c), - equal_exprt(length(), refined_string_typet::index_of_int(1))); + string_exprt res(get_char_type()); + and_exprt lemma(equal_exprt(res[0], c), res.has_length(1)); axioms.push_back(lemma); - + return res; } -string_exprt string_constraint_generatort::of_code_point(const exprt &code_point, axiom_vect & axioms, bool is_c_string) +string_exprt string_constraint_generatort::code_point(const exprt &code_point) { + string_exprt res(get_char_type()); typet type = code_point.type(); - binary_relation_exprt small(code_point,ID_lt,constant_of_nat(0x010000,32, type)); - axioms.emplace_back(small, - equal_exprt(length(), refined_string_typet::index_of_int(1))); - axioms.emplace_back(not_exprt(small), - equal_exprt(length(), refined_string_typet::index_of_int(2))); - axioms.emplace_back(small,equal_exprt((*this)[refined_string_typet::index_of_int(0)],typecast_exprt(code_point,refined_string_typet::java_char_type()))); + binary_relation_exprt small(code_point,ID_lt,constant_unsigned(0x010000,32)); + axioms.emplace_back(small, res.has_length(1)); + axioms.emplace_back(not_exprt(small),res.has_length(2)); + axioms.emplace_back(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type()))); axioms.emplace_back(not_exprt(small), equal_exprt - ((*this)[refined_string_typet::index_of_int(0)], + (res[0], typecast_exprt - (plus_exprt(constant_of_nat(0xD800,32, type), - div_exprt(minus_exprt(code_point,constant_of_nat(0x010000,32,type)),constant_of_nat(0x0400,32, type))), - refined_string_typet::java_char_type()))); + (plus_exprt(constant_unsigned(0xD800,32), + div_exprt(minus_exprt(code_point,constant_unsigned(0x010000,32)),constant_unsigned(0x0400,32))), + get_char_type()))); axioms.emplace_back(not_exprt(small), equal_exprt - ((*this)[refined_string_typet::index_of_int(1)], + (res[1], typecast_exprt - (plus_exprt(constant_of_nat(0xDC00,32, type), - mod_exprt(code_point,constant_of_nat(0x0400,32, type))), - refined_string_typet::java_char_type()))); - + (plus_exprt(constant_unsigned(0xDC00,32), + mod_exprt(code_point,constant_unsigned(0x0400,32))), + get_char_type()))); + return res; } -string_exprt string_constraint_generatort::of_string_char_set -(const function_application_exprt &expr) +string_exprt string_constraint_generatort::string_char_set +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); //bad args to string_char_set? - - string_exprt str = string_of_expr(args[0]); - symbol_exprt c = fresh_symbol("char", refined_string_typet::get_char_type(args[0])); - - axioms.emplace_back(equal_exprt(c,args[2])); - with_exprt sarrnew(str.content(), args[1], c); - implies_exprt lemma(binary_relation_exprt(args[1], ID_lt, str.length()), - and_exprt(equal_exprt(content(), sarrnew), - equal_exprt(length(), str.length()))); + string_exprt res(get_char_type()); + string_exprt str = string_of_expr(args(f,3)[0]); + //symbol_exprt c = fresh_symbol("char", refined_string_typet::get_char_type(args[0])); + //axioms.emplace_back(equal_exprt(c,args(f,3)[2])); + with_exprt sarrnew(str.content(), args(f,3)[1], args(f,3)[2]); + implies_exprt lemma(binary_relation_exprt(args(f,3)[1], ID_lt, str.length()), + and_exprt(equal_exprt(res.content(), sarrnew), + res.same_length(str))); axioms.push_back(lemma); - + return res; } -string_exprt string_constraint_generatort::of_string_replace +string_exprt string_constraint_generatort::string_replace (const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt str = string_of_expr(args[0]); - exprt oldChar = args[1]; - exprt newChar = args[2]; - - axioms.emplace_back(equal_exprt(length(), str.length())); - symbol_exprt qvar = string_exprt::fresh_symbol("QA_replace", refined_string_typet::index_type()); + string_exprt str = string_of_expr(args(f,3)[0]); + exprt oldChar = args(f,3)[1]; + exprt newChar = args(f,3)[2]; + string_exprt res(get_char_type()); + axioms.emplace_back(res.same_length(str)); + symbol_exprt qvar = fresh_univ_index("QA_replace"); axioms.push_back (string_constraintt (and_exprt - (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt((*this)[qvar],newChar)), + (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt(res[qvar],newChar)), implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), - equal_exprt((*this)[qvar],str[qvar])) + equal_exprt(res[qvar],str[qvar])) ) - ).forall(qvar,length())); - + ).forall(qvar,res.length())); + return res; } -string_exprt string_constraint_generatort::of_string_delete_char_at -(const function_application_exprt &expr) +string_exprt string_constraint_generatort::string_delete_char_at +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 2); - string_exprt str = string_of_expr(args[0]); + string_exprt str = string_of_expr(args(f,2)[0]); exprt index_one = refined_string_typet::index_of_int(1); - of_string_delete(str,args[1],plus_exprt(args[1],index_one),symbol_to_string,axioms); + return string_delete(str,args(f,2)[1],plus_exprt(args(f,2)[1],index_one)); } -string_exprt string_constraint_generatort::of_string_delete +string_exprt string_constraint_generatort::string_delete (const string_exprt &str, const exprt & start, const exprt & end) { - // We should have these formulas: - // (index < |str| ==> |s| = |str| - 1) && (index >= |str| ==> |s| = |str|) - // forall i < |s| (i < index ==> s[i] = str[i] - // && i >= index ==> s[i] = str[i+1]) - // However this may make the index set computation loop because the same - // index appears switched by one. - // It may be better to call two substrings functions - assert(start.type() == refined_string_typet::index_type()); assert(end.type() == refined_string_typet::index_type()); - string_exprt str1(refined_string_typet::get_char_type(str)); - string_exprt str2(refined_string_typet::get_char_type(str)); - str1.of_string_substring(str,refined_string_typet::index_zero(),start,symbol_to_string,axioms); - str2.of_string_substring(str,end,str.length(),symbol_to_string,axioms); - of_string_concat(str1,str2,axioms); - + string_exprt str1 = string_substring(str,refined_string_typet::index_zero(),start); + string_exprt str2 = string_substring(str,end,str.length()); + return string_concat(str1,str2); } -string_exprt string_constraint_generatort::of_string_delete -(const function_application_exprt &expr) +string_exprt string_constraint_generatort::string_delete +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 3); - string_exprt str = string_of_expr(args[0]); - of_string_delete(str,args[1],args[2],symbol_to_string,axioms); + string_exprt str = string_of_expr(args(f,3)[0]); + return string_delete(str,args(f,3)[1],args(f,3)[2]); } -string_exprt string_constraint_generatort::of_string_concat_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_int +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_int(args(f,2)[1],10); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - - s2.of_int(args[1],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_long +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_int(args(f,2)[1],30); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_bool(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_bool +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_bool(args(f,2)[1]); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_char(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_char +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_char(args(f,2)[1]); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),30); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_double +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_float(args(f,2)[1],30); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[1],axioms,refined_string_typet::is_c_string_type(f.type()),10); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_float +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = of_float(args(f,2)[1],10); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_concat_code_point(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_code_point(args[1],axioms,refined_string_typet::is_c_string_type(f.type())); - of_string_concat(s1,s2,axioms); +string_exprt string_constraint_generatort::string_concat_code_point +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = code_point(args(f,2)[1]); + return string_concat(s1,s2); } -string_exprt string_constraint_generatort::of_string_insert(const string_exprt & s1, const string_exprt & s2, - const exprt & offset, - std::map & symbol_to_string, - axiom_vect & axioms) +string_exprt string_constraint_generatort::string_insert +(const string_exprt & s1, const string_exprt & s2, const exprt & offset) { assert(offset.type() == refined_string_typet::index_type()); - unsignedbv_typet char_type = refined_string_typet::get_char_type(s1); - string_exprt pref(char_type); - string_exprt suf(char_type); - string_exprt concat1(char_type); - pref.of_string_substring(s1,refined_string_typet::index_zero(),offset,symbol_to_string,axioms); - suf.of_string_substring(s1,offset,s1.length(),symbol_to_string,axioms); - concat1.of_string_concat(pref,s2,axioms); - of_string_concat(concat1,suf,axioms); + string_exprt pref = string_substring(s1,refined_string_typet::index_zero(),offset); + string_exprt suf = string_substring(s1,offset,s1.length()); + string_exprt concat1 = string_concat(pref,s2); + return string_concat(concat1,suf); } +string_exprt string_constraint_generatort::string_insert +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = string_of_expr(args(f,3)[2]); + return string_insert(s1, s2, args(f,3)[1]); +} -string_exprt string_constraint_generatort::of_string_insert(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2 = string_of_expr(args[2],symbol_to_string,axioms); - of_string_insert(s1, s2, args[1],symbol_to_string, axioms); +string_exprt string_constraint_generatort::string_insert_int +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_int(args(f,3)[2],10); + return string_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::of_string_insert_int(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[2])); - s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +string_exprt string_constraint_generatort::string_insert_long +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_int(args(f,3)[2],30); + return string_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::of_string_insert_long(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[2])); - s2.of_int(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +string_exprt string_constraint_generatort::string_insert_bool +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_bool(args(f,3)[2]); + return string_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::of_string_insert_bool(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_bool(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); +string_exprt string_constraint_generatort::string_insert_char +(const function_application_exprt &f) +{ + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_char(args(f,3)[2]); + return string_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::of_string_insert_char(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_char(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type())); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -string_exprt string_constraint_generatort::of_string_insert_double(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),30); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - -string_exprt string_constraint_generatort::of_string_insert_float(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt s1 = string_of_expr(args[0],symbol_to_string,axioms); - string_exprt s2(refined_string_typet::get_char_type(args[0])); - s2.of_float(args[2],axioms,refined_string_typet::is_c_string_type(args[0].type()),10); - of_string_insert(s1,s2,args[1],symbol_to_string,axioms); -} - - -#include - -string_exprt string_constraint_generatort::of_string_format(const function_application_exprt &f, std::map & symbol_to_string, axiom_vect &axioms){ - const function_application_exprt::argumentst &args = f.arguments(); - // warning this is right now only for java: - bool is_c_string = false; - unsignedbv_typet char_type = is_c_string?refined_string_typet::char_type():refined_string_typet::java_char_type(); - size_t char_width = is_c_string?STRING_SOLVER_CHAR_WIDTH:JAVA_STRING_SOLVER_CHAR_WIDTH; - - if(args.size() == 2) - { - - // Warning: this is not very clean: - irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); - std::string format_string = id2string(literal); - std::cout << "string_exprt::of_string_format " << format_string << std::endl; - size_t position = format_string.find_first_of('%'); - std::vector strings; - int arg_counter = 0; - - string_exprt begin(char_type); - begin.of_string_constant(format_string.substr(0,position),char_width,char_type,axioms); - strings.push_back(begin); - //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; - //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; - - while(position != std::string::npos) - { - switch(format_string[position+1]) { - case 'd' : - { - string_exprt str(char_type); - index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); - typecast_exprt arg_int(arg_object, signedbv_typet(32)); - symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); - axioms.push_back(equal_exprt(arg_int,var_arg_int)); - axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); - str.of_int(var_arg_int,axioms,is_c_string,10); - - strings.push_back(str); - std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; - break; - } - - default: - { - std::cout << "warning: unknown string format: " << format_string << std::endl; - break; - } - } - size_t new_position = format_string.find_first_of('%',position+2); - if(new_position != std::string::npos) { - string_exprt str(char_type); - str.of_string_constant(format_string.substr(position+2,new_position),char_width,char_type,axioms); - strings.push_back(str); - } - position = new_position; - } - - - string_exprt * concatenation = &strings[0]; - int i; - for(i = 1; i < strings.size() - 1; i++) - { - string_exprt str(refined_string_typet::java_char_type()); - str.of_string_concat(*concatenation,strings[i],axioms); - concatenation = &str; - } - - of_string_concat(*concatenation,strings[i],axioms); - } - -} - -void string_constraint_generator::make_string(const symbol_exprt & sym, const exprt & str) +string_exprt string_constraint_generatort::string_insert_double +(const function_application_exprt &f) { - //debug() << "string_constraint_generatort::make_string of " << pretty_short(sym) << eom; - //<< " --> " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); - else { - // assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - if (str.id() == ID_function_application && - starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { - symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - assign_to_symbol(sym,s); - } - else - assign_to_symbol(sym,string_exprt::of_expr(str,symbol_to_string,string_axioms)); - } - //debug() << "string = " << symbol_to_string[sym.get_identifier()].pretty() << eom; + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_float(args(f,3)[2]); + return string_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generator::make_string(const exprt & str) +string_exprt string_constraint_generatort::string_insert_float +(const function_application_exprt &f) { - //debug() << "string_constraint_generatort::make_string of " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - return string_of_symbol(to_symbol_expr(str)); - else - if (str.id() == ID_function_application && - starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { - symbol_exprt sym1 = convert_string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - return s; - } - else - return string_exprt::of_expr(str,symbol_to_string,string_axioms); + string_exprt s1 = string_of_expr(args(f,3)[0]); + string_exprt s2 = of_float(args(f,3)[2]); + return string_insert(s1,s2,args(f,3)[1]); } - -exprt string_constraint_generatort::convert_string_equal(const function_application_exprt &f) { +exprt string_constraint_generatort::string_equal +(const function_application_exprt &f) + { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt eq = fresh_boolean("equal"); typecast_exprt tc_eq(eq,f.type()); - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string equal? - - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = string_of_expr(args(f,2)[1]); // We want to write: // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) @@ -1350,24 +1125,25 @@ exprt string_constraint_generatort::convert_string_equal(const function_applicat // forall i < s1.length. eq => s1[i] = s2[i] // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) - symbol_exprt witness = fresh_index("witness_unequal"); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal", index_type); + symbol_exprt witness = fresh_exist_index("witness_unequal"); + symbol_exprt qvar = fresh_univ_index("QA_equal"); - string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); - - string_axioms.push_back + axioms.emplace_back(eq, s1.same_length(s2)); + axioms.push_back (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) - ).forall(qvar,zero,s1.length())); + ).forall(qvar,s1.length())); - string_axioms.emplace_back + axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,zero,s1.length()))); + string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,s1.length()))); return tc_eq; } -exprt character_equals_ignore_case(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) { +exprt character_equals_ignore_case +(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) +{ exprt is_upper_case_1 = and_exprt(binary_relation_exprt(char_A,ID_le,char1), binary_relation_exprt(char1,ID_le,char_Z)); exprt is_upper_case_2 = and_exprt(binary_relation_exprt(char_A,ID_le,char2), @@ -1377,118 +1153,100 @@ exprt character_equals_ignore_case(exprt char1, exprt char2, exprt char_a, exprt and_exprt(is_upper_case_2, equal_exprt(minus_exprt(plus_exprt(char_a,char2),char_A),char1))); } -exprt string_constraint_generatort::convert_string_equals_ignore_case(const function_application_exprt &f) { +exprt string_constraint_generatort::string_equals_ignore_case +(const function_application_exprt &f) +{ assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt eq = fresh_boolean("equal_ignore_case"); typecast_exprt tc_eq(eq,f.type()); - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //bad args to string equal? - - bool is_c_string = refined_string_typet::is_c_string_type(f.type()); - exprt char_a; - exprt char_A; - exprt char_Z; - if(is_c_string) { - char_a = constant_of_nat(97,refined_string_typet::char_type()); - char_A = constant_of_nat(65,refined_string_typet::char_type()); - char_Z = constant_of_nat(90,refined_string_typet::char_type()); - } else { - char_a = constant_of_nat(97,refined_string_typet::java_char_type()); - char_A = constant_of_nat(65,refined_string_typet::java_char_type()); - char_Z = constant_of_nat(90,refined_string_typet::java_char_type()); - } + check_char_type(f); // is this necessary? - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); - symbol_exprt witness = fresh_index("witness_unequal_ignore_case"); - symbol_exprt qvar = string_exprt::fresh_symbol("qvar_equal_ignore_case", index_type); + exprt char_a = constant_char(97); + exprt char_A = constant_char(65); + exprt char_Z = constant_char(90); + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = string_of_expr(args(f,2)[1]); + symbol_exprt witness = fresh_exist_index("witness_unequal_ignore_case"); + symbol_exprt qvar = fresh_univ_index("QA_equal_ignore_case"); - string_axioms.emplace_back(eq, equal_exprt(s1.length(), s2.length())); + axioms.emplace_back(eq, s1.same_length(s2)); - string_axioms.push_back + axioms.push_back (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) - ).forall(qvar,zero,s1.length())); + ).forall(qvar,s1.length())); - string_axioms.emplace_back + axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,zero,s1.length()))); - + string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,s1.length()))); + return tc_eq; } -bvt string_constraint_generatort::convert_string_length( - const function_application_exprt &f) +exprt string_constraint_generatort::string_length +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - string_exprt str = make_string(args[0]); - exprt length = str.length(); - return tmp_c_o_n_v_e_r_t_bv(length); + string_exprt str = string_of_expr(args(f,1)[0]); + return str.length(); } -exprt string_constraint_generatort::is_positive(const exprt & x) +exprt is_positive(const exprt & x) { return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } -exprt string_constraint_generatort::convert_string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) +exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) { symbol_exprt isprefix = fresh_boolean("isprefix"); - string_axioms.emplace_back(isprefix, str >= plus_exprt(prefix.length(),offset)); + axioms.emplace_back(isprefix, str.longer(plus_exprt(prefix.length(),offset))); // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_isprefix", index_type); - string_axioms.push_back + symbol_exprt qvar = fresh_univ_index("QA_isprefix"); + axioms.push_back (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) - ).forall(qvar,zero,prefix.length())); + ).forall(qvar,prefix.length())); - symbol_exprt witness = fresh_index("witness_not_isprefix"); + symbol_exprt witness = fresh_exist_index("witness_not_isprefix"); - or_exprt s0_notpref_s1(not_exprt(str >= plus_exprt(prefix.length(),offset)), + or_exprt s0_notpref_s1(not_exprt(str.longer(plus_exprt(prefix.length(),offset))), and_exprt - (str >= plus_exprt(prefix.length(),offset), - and_exprt(binary_relation_exprt(witness,ID_ge,zero), - and_exprt(prefix > witness, + (str.longer(plus_exprt(prefix.length(),offset)), + and_exprt(is_positive(witness), + and_exprt(prefix.strictly_longer(witness), notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); - string_axioms.emplace_back(implies_exprt (not_exprt(isprefix),s0_notpref_s1)); + axioms.emplace_back(implies_exprt(not_exprt(isprefix),s0_notpref_s1)); return isprefix; } -exprt string_constraint_generatort::convert_string_is_prefix +exprt string_constraint_generatort::string_is_prefix (const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - string_exprt s0 = make_string(args[swap_arguments?1:0]); - string_exprt s1 = make_string(args[swap_arguments?0:1]); + string_exprt s0 = string_of_expr(args[swap_arguments?1:0]); + string_exprt s1 = string_of_expr(args[swap_arguments?0:1]); exprt offset; - - if(args.size() == 2) offset = zero; + if(args.size() == 2) offset = refined_string_typet::index_zero(); else if (args.size() == 3) offset = args[2]; - - return typecast_exprt(convert_string_is_prefix(s0,s1,offset),f.type()); + return typecast_exprt(string_is_prefix(s0,s1,offset),f.type()); } -exprt string_constraint_generatort::convert_string_is_empty +exprt string_constraint_generatort::string_is_empty (const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt is_empty = fresh_boolean("is_empty"); - string_exprt s0 = make_string(args[0]); - string_axioms.emplace_back(implies_exprt(is_empty, equal_exprt(s0.length(),zero))); - string_axioms.emplace_back(implies_exprt(equal_exprt(s0.length(),zero),is_empty)); + string_exprt s0 = string_of_expr(args(f,1)[0]); + axioms.emplace_back(implies_exprt(is_empty, s0.has_length(0))); + axioms.emplace_back(implies_exprt(s0.has_length(0),is_empty)); return typecast_exprt(is_empty,f.type()); } -bvt string_constraint_generatort::convert_string_is_suffix +exprt string_constraint_generatort::string_is_suffix (const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); @@ -1497,9 +1255,8 @@ bvt string_constraint_generatort::convert_string_is_suffix symbol_exprt issuffix = fresh_boolean("issuffix"); typecast_exprt tc_issuffix(issuffix,f.type()); - string_exprt s0 = make_string(args[swap_arguments?1:0]); - string_exprt s1 = make_string(args[swap_arguments?0:1]); - + string_exprt s0 = string_of_expr(args[swap_arguments?1:0]); + string_exprt s1 = string_of_expr(args[swap_arguments?0:1]); // issufix(s1,s0) => s0.length >= s1.length // && forall witness < s1.length. @@ -1507,43 +1264,40 @@ bvt string_constraint_generatort::convert_string_is_suffix // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - string_axioms.emplace_back(implies_exprt(issuffix, s1 >= s0)); + axioms.emplace_back(implies_exprt(issuffix, s1.longer(s0))); - symbol_exprt qvar = string_exprt::fresh_symbol("QA_suffix", index_type); + symbol_exprt qvar = fresh_univ_index("QA_suffix"); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); - string_axioms.push_back + axioms.push_back (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) - ).forall(qvar,zero,s0.length())); + ).forall(qvar,s0.length())); - symbol_exprt witness = fresh_index("witness_not_suffix"); + symbol_exprt witness = fresh_exist_index("witness_not_suffix"); exprt shifted = plus_exprt(witness, minus_exprt(s1.length(), s0.length())); implies_exprt lemma2(not_exprt(issuffix), and_exprt(is_positive(witness), - or_exprt(s0 > s1, - and_exprt(s0 > witness, + or_exprt(s0.strictly_longer(s1), + and_exprt(s0.strictly_longer(witness), notequal_exprt(s0[witness],s1[shifted]))))); - string_axioms.emplace_back(lemma2); + axioms.emplace_back(lemma2); - return tmp_c_o_n_v_e_r_t_bv(tc_issuffix); + return tc_issuffix; } -bvt string_constraint_generatort::convert_string_contains( - const function_application_exprt &f) +exprt string_constraint_generatort::string_contains +( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string contains? assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt contains = fresh_boolean("contains"); typecast_exprt tc_contains(contains,f.type()); - string_exprt s0 = make_string(args[0]); - string_exprt s1 = make_string(args[1]); + string_exprt s0 = string_of_expr(args(f,2)[0]); + string_exprt s1 = string_of_expr(args(f,2)[1]); // contains => s0.length >= s1.length // && startpos <= s0.length - s1.length @@ -1553,48 +1307,32 @@ bvt string_constraint_generatort::convert_string_contains( // || (forall startpos <= s0.length - s1.length. // exists witness < s1.length && s1[witness] != s0[witness + startpos] - string_axioms.emplace_back(implies_exprt(contains, s0 >= s1)); + axioms.emplace_back(implies_exprt(contains, s0.longer(s1))); + symbol_exprt startpos = fresh_exist_index("startpos_contains"); + axioms.emplace_back( + and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - symbol_exprt startpos = fresh_index("startpos_contains"); - - string_axioms.emplace_back(//implies_exprt(contains, - and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - - symbol_exprt qvar = string_exprt::fresh_symbol("QA_contains", index_type); + symbol_exprt qvar = fresh_univ_index("QA_contains"); exprt qvar_shifted = plus_exprt(qvar, startpos); - string_axioms.push_back + axioms.push_back (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) - ).forall(qvar,zero,s1.length())); + ).forall(qvar,s1.length())); // We rewrite the axiom for !contains as: // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] - - string_axioms.push_back + axioms.push_back (string_constraintt::not_contains - (zero,plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), - and_exprt(not_exprt(contains),s0 >= s1),zero,s1.length(),s0,s1)); + (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), + and_exprt(not_exprt(contains),s0.longer(s1)),refined_string_typet::index_zero(),s1.length(),s0,s1)); - return tmp_c_o_n_v_e_r_t_bv(tc_contains); -} - - -symbol_exprt string_constraint_generatort::fresh_index(const irep_idt &prefix){ - symbol_exprt i = string_exprt::fresh_symbol(prefix,index_type); - index_symbols.push_back(i); - return i; + return tc_contains; } -symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix){ - symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); - boolean_symbols.push_back(b); - return b; -} -exprt string_constraint_generatort::convert_string_hash_code(const function_application_exprt &f) +exprt string_constraint_generatort::string_hash_code(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - string_exprt str = make_string(args[0]); + string_exprt str = string_of_expr(args(f,1)[0]); typet return_type = f.type(); // initialisation of the missing pool variable @@ -1608,8 +1346,8 @@ exprt string_constraint_generatort::convert_string_hash_code(const function_appl // WARNING: the specification may be incomplete for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { - symbol_exprt i = string_exprt::fresh_symbol("index_hash", refined_string_typet::index_type()); - string_axioms.emplace_back + symbol_exprt i = fresh_exist_index("index_hash"); + axioms.emplace_back (or_exprt (equal_exprt(hash[it->second],hash[str]), or_exprt @@ -1617,134 +1355,133 @@ exprt string_constraint_generatort::convert_string_hash_code(const function_appl and_exprt(equal_exprt(it->second.length(),str.length()), and_exprt (not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero ))) - )))); + and_exprt(str.strictly_longer(i),is_positive(i)) + ))))); } - - return hash[str]; } -exprt string_constraint_generatort::convert_string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index){ - symbol_exprt index = fresh_index("index_of"); +exprt string_constraint_generatort::string_index_of +(const string_exprt &str, const exprt & c, const exprt & from_index) +{ + symbol_exprt index = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_in_index_of"); // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) // && forall n. from_index <= n < i => s[n] != c - string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); + axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); + axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); + axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); - symbol_exprt n = string_exprt::fresh_symbol("QA_index_of",index_type); + symbol_exprt n = fresh_univ_index("QA_index_of"); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); + axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); - symbol_exprt m = string_exprt::fresh_symbol("QA_index_of",index_type); + symbol_exprt m = fresh_univ_index("QA_index_of"); - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); + axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); return index; } -exprt string_constraint_generatort::convert_string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) { - symbol_exprt offset = fresh_index("index_of"); - + symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); - string_axioms.emplace_back(contains, and_exprt - (str >= plus_exprt(substring.length(),offset), - binary_relation_exprt(offset,ID_ge,from_index))); - string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + axioms.emplace_back(contains, and_exprt + (str.longer(plus_exprt(substring.length(),offset)), + binary_relation_exprt(offset,ID_ge,from_index))); + axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); - string_axioms.push_back + symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); + axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,zero,substring.length())); + ).forall(qvar,substring.length())); - - debug() << "string_constraint_generatort::convert_string_index_of_string : warning the stpecification is only partial" << eom; - return offset; } -exprt string_constraint_generatort::convert_string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) { - symbol_exprt offset = fresh_index("index_of"); - + symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); - string_axioms.emplace_back(contains, and_exprt - (str >= plus_exprt(substring.length(),offset), - binary_relation_exprt(offset,ID_le,from_index))); - string_axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + axioms.emplace_back(contains, and_exprt + (str.longer(plus_exprt(substring.length(),offset)), + binary_relation_exprt(offset,ID_le,from_index))); + axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = string_exprt::fresh_symbol("QA_index_of_string", index_type); - string_axioms.push_back + symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); + axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,zero,substring.length())); - - debug() << "string_constraint_generatort::convert_string_last_index_of_string : warning the stpecification is only partial" << eom; + ).forall(qvar,substring.length())); + return offset; } -exprt string_constraint_generatort::convert_string_index_of( - const function_application_exprt &f) +exprt string_constraint_generatort::string_index_of +( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == index_type); - string_exprt str = make_string(args[0]); + assert(f.type() == refined_string_typet::index_type()); + string_exprt str = string_of_expr(args[0]); exprt c = args[1]; exprt from_index; - if(args.size() == 2) from_index = zero; + if(args.size() == 2) from_index = refined_string_typet::index_zero(); else if (args.size() == 3) from_index = args[2]; else assert(false); - if(refined_string_typet::is_java_string_type(c.type())){ - string_exprt sub = make_string(c); - return convert_string_index_of_string(str,sub,from_index); - } else { - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); + if(refined_string_typet::is_java_string_type(c.type())) + { + string_exprt sub = string_of_expr(c); + return string_index_of_string(str,sub,from_index); + } + else + { + if(!(c.type() == get_char_type())) + { + std::string msg("argument to string_index_of does not have char type "); + msg += c.type().pretty(); + throw msg; + c = typecast_exprt(c,get_char_type()); + } + return string_index_of(str,c,from_index); } - return convert_string_index_of(str,c,from_index); - } - } -exprt string_constraint_generatort::convert_string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index) { - symbol_exprt index = fresh_index("last_index_of"); +exprt string_constraint_generatort::string_last_index_of +(const string_exprt &str, const exprt & c, const exprt & from_index) +{ + symbol_exprt index = fresh_exist_index("last_index_of"); symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) // && forall n. i <= n <= from_index => s[n] != c exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); - string_axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); - string_axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - string_axioms.emplace_back(contains,and_exprt(binary_relation_exprt(zero,ID_le,index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); + axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); + axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); + axioms.emplace_back(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); - symbol_exprt n = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); + symbol_exprt n = fresh_univ_index("QA_last_index_of"); + axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); - symbol_exprt m = string_exprt::fresh_symbol("QA_last_index_of",index_type); - string_axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,zero,from_index_plus_one)); + symbol_exprt m = fresh_univ_index("QA_last_index_of"); + axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index_plus_one)); return index; - } -exprt string_constraint_generatort::convert_string_last_index_of( - const function_application_exprt &f) +exprt string_constraint_generatort::string_last_index_of +( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == index_type); - string_exprt str = make_string(args[0]); + assert(f.type() == refined_string_typet::index_type()); + string_exprt str = string_of_expr(args[0]); exprt c = args[1]; exprt from_index; @@ -1752,21 +1489,26 @@ exprt string_constraint_generatort::convert_string_last_index_of( else if (args.size() == 3) from_index = args[2]; else assert(false); - if(refined_string_typet::is_java_string_type(c.type())){ - string_exprt sub = make_string(c); - return convert_string_last_index_of_string(str,sub,from_index); - } else { - if(!(c.type() == char_type || c.type() == java_char_type)){ - debug() << "warning: argument to string_index_of does not have char type: " - << c.type().pretty() << eom; - c = typecast_exprt(c,java_char_type); + if(refined_string_typet::is_java_string_type(c.type())) + { + string_exprt sub = string_of_expr(c); + return string_last_index_of_string(str,sub,from_index); + } + else + { + if(!(c.type() == get_char_type())) + { + std::string msg("warning: argument to string_index_of does not have char type: "); + msg += c.type().pretty(); + throw msg; + c = typecast_exprt(c,get_char_type()); + } + return string_last_index_of(str,c,from_index); } - return convert_string_last_index_of(str,c,from_index); - } } -bvt string_constraint_generatort::convert_char_literal( - const function_application_exprt &f) +exprt string_constraint_generatort::char_literal +( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); // there should be exactly 1 argument to char literal @@ -1784,249 +1526,196 @@ bvt string_constraint_generatort::convert_char_literal( std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); - return tmp_c_o_n_v_e_r_t_bv(constant_exprt(binary, char_type)); - } - else { - throw "convert_char_literal unimplemented"; + return constant_exprt(binary, get_char_type()); } + else + { + throw "convert_char_literal unimplemented"; + } } -bvt string_constraint_generatort::convert_string_char_at( - const function_application_exprt &f) +exprt string_constraint_generatort::string_char_at +( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); //string_char_at expects 2 arguments - string_exprt str = make_string(args[0]); - - if(f.type() == char_type) { - symbol_exprt char_sym = string_exprt::fresh_symbol("char",char_type); - string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); - return tmp_c_o_n_v_e_r_t_bv(char_sym); - } else { - assert(f.type() == java_char_type); - symbol_exprt char_sym = string_exprt::fresh_symbol("char",java_char_type); - string_axioms.emplace_back(equal_exprt(char_sym,str[args[1]])); - return tmp_c_o_n_v_e_r_t_bv(char_sym); - } -} - - - -constant_exprt string_constraint_generatort::constant_of_nat(int i,typet t) { - return constant_exprt(integer2binary(i, boolbv_width(t)), t); + string_exprt str = string_of_expr(args(f,2)[0]); + symbol_exprt char_sym = string_exprt::fresh_symbol("char",get_char_type()); + axioms.emplace_back(equal_exprt(char_sym,str[args(f,2)[1]])); + return char_sym; } -exprt string_constraint_generatort::convert_string_parse_int -(const function_application_exprt &expr) +exprt string_constraint_generatort::string_parse_int +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = expr.arguments(); - assert(args.size() == 1); - - string_exprt str = make_string(args[0]); - typet type = expr.type(); + string_exprt str = string_of_expr(args(f,1)[0]); + typet type = f.type(); symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); - exprt zero_char; - exprt minus_char; - exprt plus_char; - if(refined_string_typet::is_c_string_type(args[0].type())) { - plus_char = constant_of_nat(43,refined_string_typet::char_type()); - minus_char = constant_of_nat(45,refined_string_typet::char_type()); - zero_char = constant_of_nat(48,refined_string_typet::char_type()); - } - else { - plus_char = constant_of_nat(43,refined_string_typet::java_char_type()); - minus_char = constant_of_nat(45,refined_string_typet::java_char_type()); - zero_char = constant_of_nat(48,refined_string_typet::java_char_type()); - } - - exprt ten = constant_of_nat(10,type); - - exprt chr = str[refined_string_typet::index_of_int(0)]; + exprt zero_char = constant_char(48); + exprt minus_char = constant_char(45); + exprt plus_char = constant_char(43); + // Not sure about the size + size_t width = 64; + constant_exprt ten(integer2binary(10,width),type); + + exprt chr = str[0]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_plus = equal_exprt(chr,plus_char); exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); - for(int size=1; size<=10;size++) { - exprt sum = constant_of_nat(0,type); - exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(int j=1; j::iterator i = current_index_set.begin(), - end = current_index_set.end(); i != end; ++i) { - const exprt &s = i->first; - debug() << "IS(" << pretty_short(s) << ") == {"; - - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) - debug() << pretty_short (*j) << "; "; - debug() << "}" << eom; - - - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) { - const exprt &val = *j; - - for (size_t k = 0; k < universal_axioms.size(); ++k) { - assert(universal_axioms[k].is_univ_quant()); - string_constraintt lemma = instantiate(universal_axioms[k], s, val); - assert(lemma.is_simple()); - add_lemma(lemma); - } - } - } -} -exprt string_constraint_generatort::convert_string_to_char_array +exprt string_constraint_generatort::string_to_char_array (const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - - string_exprt str = make_string(args[0]); - debug() << "convert_string_to_char_array returns: " << str.content().pretty() << eom; + string_exprt str = string_of_expr(args(f,1)[0]); return str.content(); } - - - -exprt string_constraint_generatort::convert_string_compare_to(const function_application_exprt &f) +exprt string_constraint_generatort::string_compare_to +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - - string_exprt s1 = make_string(args[0]); - string_exprt s2 = make_string(args[1]); + string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s2 = string_of_expr(args(f,2)[1]); typet return_type = f.type(); symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); @@ -2045,40 +1734,40 @@ exprt string_constraint_generatort::convert_string_compare_to(const function_app // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| // && forall i < x. res != 0 => s1[i] = s2[i] - symbol_exprt i = string_exprt::fresh_symbol("QA_compare_to",index_type); - equal_exprt res_null = equal_exprt(res,constant_of_nat(0,return_type)); - string_axioms.emplace_back(res_null, equal_exprt(s1.length(),s2.length())); - string_axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,zero,s1.length())); - symbol_exprt x = fresh_index("index_compare_to"); - string_axioms.push_back + // Not sure about the width + size_t width = 64; + + symbol_exprt i = fresh_univ_index("QA_compare_to"); + equal_exprt res_null = equal_exprt(res,constant_unsigned(0,width)); + axioms.emplace_back(res_null, s1.same_length(s2)); + axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,s1.length())); + symbol_exprt x = fresh_exist_index("index_compare_to"); + axioms.push_back (implies_exprt (not_exprt(res_null), and_exprt - (binary_relation_exprt(x,ID_ge,constant_of_nat(0,return_type)), + (binary_relation_exprt(x,ID_ge,constant_unsigned(0,width)), or_exprt (and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), or_exprt - (and_exprt(s1<=s2,s1 > x), and_exprt(s1>=s2,s2 > x))), + (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), and_exprt(s1.longer(s2),s2.strictly_longer(x)))), and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), or_exprt - (and_exprt(s2>s1,equal_exprt(x,s1.length())), and_exprt(s1>s2,equal_exprt(x,s2.length())))))) - )); + (and_exprt(s2.strictly_longer(s1),s1.has_length(x)), + and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); - string_axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,zero,x)); + axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,x)); return res; } -symbol_exprt string_constraint_generatort::convert_string_intern(const function_application_exprt &f) +symbol_exprt string_constraint_generatort::string_intern(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); - string_exprt str = make_string(args[0]); + string_exprt str = string_of_expr(args(f,1)[0]); typet return_type = f.type(); - // initialisation of the missing pool variable std::map::iterator it; for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) @@ -2095,24 +1784,122 @@ symbol_exprt string_constraint_generatort::convert_string_intern(const function_ for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); - string_axioms.emplace_back(disj); + axioms.emplace_back(disj); // WARNING: the specification may be incomplete or incorrect for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) if(it->second != str) { - symbol_exprt i = string_exprt::fresh_symbol("index_intern", refined_string_typet::index_type()); - string_axioms.emplace_back + symbol_exprt i = fresh_exist_index("index_intern"); + axioms.emplace_back (or_exprt (equal_exprt(pool[it->second],pool[str]), or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), + (not_exprt(str.same_length(it->second)), + and_exprt(str.same_length(it->second), and_exprt(not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str>i,binary_relation_exprt(i,ID_ge,zero))) - )))); + and_exprt(str.strictly_longer(i),is_positive(i) + )))))); } return pool[str]; } + +// #include for debugging + +string_exprt string_constraint_generatort::string_format(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args = f.arguments(); + unsignedbv_typet char_type = get_char_type(); + + if(args.size() == 2) + { + // Warning: this is not very clean: + irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); + std::string format_string = id2string(literal); + //std::cout << "string_exprt::of_string_format " << format_string << std::endl; + size_t position = format_string.find_first_of('%'); + std::vector strings; + int arg_counter = 0; + + string_exprt begin = string_constant(format_string.substr(0,position),get_char_width(),char_type); + strings.push_back(begin); + //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; + //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); + //std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; + + while(position != std::string::npos) + { + switch(format_string[position+1]) { + case 'd' : + { + index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); + typecast_exprt arg_int(arg_object, signedbv_typet(32)); + symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); + axioms.push_back(equal_exprt(arg_int,var_arg_int)); + axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); + string_exprt str = of_int(var_arg_int,10); + strings.push_back(str); + // std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; + break; + } + + default: + { + //std::cout << "warning: unknown string format: " << format_string << std::endl; + break; + } + } + size_t new_position = format_string.find_first_of('%',position+2); + if(new_position != std::string::npos) { + string_exprt str = string_constant(format_string.substr(position+2,new_position), + get_char_width(),char_type); + strings.push_back(str); + } + position = new_position; + } + + string_exprt * concatenation = &strings[0]; + unsigned i; + for(i = 1; i < strings.size() - 1; i++) + { + string_exprt str = string_concat(*concatenation,strings[i]); + concatenation = &str; + } + + return string_concat(*concatenation,strings[i]); + } + else assert(false); +} + +void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, const exprt & str) +{ + if(str.id()==ID_symbol) + assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); + else + assign_to_symbol(sym,string_of_expr(str)); +} + +/* + +string_exprt string_constraint_generator::string_of_expr(const exprt & str) +{ + //debug() << "string_constraint_generatort::string_of_expr of " << pretty_short(str) << eom; + if(str.id()==ID_symbol) + return string_of_symbol(to_symbol_expr(str)); + else + if (str.id() == ID_function_application && + starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { + symbol_exprt sym1 = string_intern(to_function_application_expr(str)); + string_exprt s(refined_string_typet::java_char_type()); + assign_to_symbol(sym1,s); + return s; + } + else + return string_exprt::of_expr(str,symbol_to_string,axioms); +} +*/ + + diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index cf58338131a..164a653bc00 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -18,6 +18,7 @@ class string_constraint_generatort { string_constraint_generatort() : language(UNKNOWN){ } constant_exprt constant_char(int i); + constant_exprt constant_unsigned(int i,size_t width); unsignedbv_typet get_char_type(); size_t get_char_width(); inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; @@ -40,18 +41,38 @@ class string_constraint_generatort { // Symbols used in existential quantifications std::vector index_symbols; + symbol_exprt fresh_exist_index(const irep_idt &prefix); + symbol_exprt fresh_univ_index(const irep_idt &prefix); + symbol_exprt fresh_boolean(const irep_idt &prefix); + + + std::map symbol_to_string; inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ symbol_to_string[sym.get_identifier()]= expr; } + // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string + string_exprt get_string_of_symbol(const symbol_exprt & sym); + + // Add to the list of axioms, lemmas which should hold for the string to be + // equal to the given expression. + string_exprt of_expr(const exprt & unrefined_string); string_exprt string_of_expr(const exprt & expr); + void string_of_expr(const symbol_exprt & sym, const exprt & str); string_exprt string_of_symbol(const symbol_exprt & sym); + // The following functions convert different string functions + // and add the corresponding lemmas to a list of properties to be checked + exprt function_application(const function_application_exprt &expr); - string_exprt function_application(const function_application_exprt &expr); - string_exprt string_literal(const function_application_exprt &f); + string_exprt empty_string(const function_application_exprt &f); + string_exprt string_char_set(const function_application_exprt &expr); + exprt string_char_at(const function_application_exprt &f); + exprt string_code_point_at(const function_application_exprt &f); + exprt string_code_point_before(const function_application_exprt &f); + string_exprt string_copy(const function_application_exprt &f); string_exprt string_concat(const string_exprt & s1, const string_exprt & s2); string_exprt string_concat(const function_application_exprt &f); string_exprt string_concat_int(const function_application_exprt &f); @@ -61,8 +82,24 @@ class string_constraint_generatort { string_exprt string_concat_double(const function_application_exprt &f); string_exprt string_concat_float(const function_application_exprt &f); string_exprt string_concat_code_point(const function_application_exprt &f); + string_exprt string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type); + exprt string_contains(const function_application_exprt &f); + exprt string_equal(const function_application_exprt &f); + exprt string_equals_ignore_case(const function_application_exprt &f); + string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); + string_exprt string_delete(const function_application_exprt &expr); + string_exprt string_delete_char_at(const function_application_exprt &expr); + string_exprt string_format(const function_application_exprt &f); + exprt string_hash_code(const function_application_exprt &f); + + // Warning: the specifications are only partial for some of the "index_of" functions + exprt string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt string_index_of(const function_application_exprt &f); + exprt string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt string_last_index_of(const function_application_exprt &f); - // insert s2 in s1 at the given position string_exprt string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); string_exprt string_insert(const function_application_exprt &f); string_exprt string_insert_int(const function_application_exprt &f); @@ -71,68 +108,49 @@ class string_constraint_generatort { string_exprt string_insert_char(const function_application_exprt &f); string_exprt string_insert_double(const function_application_exprt &f); string_exprt string_insert_float(const function_application_exprt &f); - - string_exprt string_substring(const string_exprt & str, const exprt & start, const exprt & end); - string_exprt string_substring(const function_application_exprt &expr); - string_exprt string_trim(const function_application_exprt &expr); - string_exprt string_to_lower_case(const function_application_exprt &expr); - string_exprt string_to_upper_case(const function_application_exprt &expr); - string_exprt string_char_set(const function_application_exprt &expr); - string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); - string_exprt string_delete(const function_application_exprt &expr); - string_exprt string_delete_char_at(const function_application_exprt &expr); - string_exprt string_replace(const function_application_exprt &f); - - // Warning: not working correctly at the moment - string_exprt string_value_of(const function_application_exprt &f); - string_exprt string_set_length(const function_application_exprt &f); - string_exprt string_copy(const function_application_exprt &f); - string_exprt string_format(const function_application_exprt &f); - - string_exprt empty_string(const function_application_exprt &f); - + exprt string_is_empty(const function_application_exprt &f); + exprt string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + exprt string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); + exprt string_length(const function_application_exprt &f); + string_exprt string_literal(const function_application_exprt &f); string_exprt of_int(const function_application_exprt &f); - string_exprt of_int(const exprt &i, bool is_c_string, int max_size); - string_exprt of_int_hex(const exprt &i, bool is_c_string); - string_exprt of_int_hex(const function_application_exprt &f,axiom_vect & axioms); + string_exprt of_int(const exprt &i, size_t max_size); + string_exprt of_int_hex(const exprt &i); + string_exprt of_int_hex(const function_application_exprt &f); string_exprt of_long(const function_application_exprt &f); - string_exprt of_long(const exprt &i, bool is_c_string, int max_size); + string_exprt of_long(const exprt &i, size_t max_size); string_exprt of_bool(const function_application_exprt &f); - string_exprt of_bool(const exprt &i, bool is_c_string); + string_exprt of_bool(const exprt &i); string_exprt of_char(const function_application_exprt &f); - string_exprt of_char(const exprt &i, bool is_c_string); + string_exprt of_char(const exprt &i); // Warning: the specifications of these functions is only partial: string_exprt of_float(const function_application_exprt &f); - string_exprt of_float(const exprt &f, bool is_c_string, bool double_precision=false); + string_exprt of_float(const exprt &f, bool double_precision=false); string_exprt of_double(const function_application_exprt &f); - string_exprt code_point(const exprt &code_point, bool is_c_string); + string_exprt string_replace(const function_application_exprt &f); + string_exprt string_set_length(const function_application_exprt &f); + + // Warning: the specification may not be correct for the case where the string is not long enough + string_exprt string_substring(const string_exprt & str, const exprt & start, const exprt & end); + string_exprt string_substring(const function_application_exprt &expr); + + string_exprt string_to_lower_case(const function_application_exprt &expr); + string_exprt string_to_upper_case(const function_application_exprt &expr); + string_exprt string_trim(const function_application_exprt &expr); + + // Warning: not working correctly at the moment + string_exprt string_value_of(const function_application_exprt &f); + + string_exprt code_point(const exprt &code_point); string_exprt java_char_array(const exprt & char_array); string_exprt string_if(const if_exprt &expr); - // The following functions convert different string functions - // and add the corresponding lemmas to a list of properties to be checked - exprt string_equal(const function_application_exprt &f); - exprt string_equals_ignore_case(const function_application_exprt &f); - exprt string_is_empty(const function_application_exprt &f); - exprt string_length(const function_application_exprt &f); - exprt string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); - exprt string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); - exprt string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); - exprt string_contains(const function_application_exprt &f); - exprt string_hash_code(const function_application_exprt &f); - exprt string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt string_index_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt string_index_of(const function_application_exprt &f); - exprt string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt string_last_index_of(const function_application_exprt &f); exprt char_literal(const function_application_exprt &f); - exprt string_char_at(const function_application_exprt &f); - exprt string_code_point_at(const function_application_exprt &f); - exprt string_code_point_before(const function_application_exprt &f); + // Warning: this function is underspecified exprt string_code_point_count(const function_application_exprt &f); @@ -154,7 +172,21 @@ class string_constraint_generatort { // Check that the given string is from the right language void check_char_type(const exprt & str); - + inline bool use_c_string() {return (language == C);} + + // assert that the number of argument is equal to nb and extract them + inline function_application_exprt::argumentst args(const function_application_exprt &expr, size_t nb) + { + function_application_exprt::argumentst args = expr.arguments(); + assert(args.size() == nb); + return args; + } + + exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type); + exprt is_high_surrogate(const exprt & chr); + exprt is_low_surrogate(const exprt & chr); + std::map pool; + std::map hash; }; diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 105b26d4ee2..f6c2299c012 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -8,9 +8,8 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ #include -#include -#include -#include +//#include +//#include exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 6b68c98eb26..4b8860573d7 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -18,8 +18,6 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include -typedef std::vector axiom_vect; - // Expressions that encode strings class string_exprt : public struct_exprt { public: @@ -30,13 +28,6 @@ class string_exprt : public struct_exprt { // Default uses C character type string_exprt() : string_exprt(refined_string_typet::char_type()) {}; - // Add to the list of axioms, lemmas which should hold for the string to be - // equal to the given expression. - static string_exprt of_expr(const exprt & unrefined_string, std::map & symbol_to_string, axiom_vect & axioms); - - // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string - static string_exprt get_string_of_symbol(std::map & symbol_to_string, const symbol_exprt & sym); - // Generate a new symbol of the given type tp with a prefix static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); @@ -52,27 +43,35 @@ class string_exprt : public struct_exprt { // Expression of the character at position idx in the string inline index_exprt operator[] (const exprt & idx) const { return index_exprt(content(), idx);} + inline index_exprt operator[] (int i) const + { return index_exprt(content(), refined_string_typet::index_of_int(i));} // Comparison on the length of the strings - inline binary_relation_exprt operator> (const string_exprt & rhs) const - { return binary_relation_exprt(rhs.length(), ID_lt, length()); } - inline binary_relation_exprt operator<= (const string_exprt & rhs) const - { return binary_relation_exprt(length(), ID_le, rhs.length()); } - inline binary_relation_exprt operator>= (const string_exprt & rhs) const + inline binary_relation_exprt longer(const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt operator> (const exprt & rhs) const - { return binary_relation_exprt(rhs, ID_lt, length()); } - inline binary_relation_exprt operator>= (const exprt & rhs) const + inline binary_relation_exprt longer (const exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs); } - inline binary_relation_exprt operator<= (const exprt & rhs) const + inline binary_relation_exprt strictly_longer (const exprt & rhs) const + { return binary_relation_exprt(rhs, ID_lt, length()); } + inline binary_relation_exprt strictly_longer (const string_exprt & rhs) const + { return binary_relation_exprt(rhs.length(), ID_lt, length()); } + inline binary_relation_exprt shorter (const string_exprt & rhs) const + { return binary_relation_exprt(length(), ID_le, rhs.length()); } + inline binary_relation_exprt shorter (const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } - //this one is used by maps: inline binary_relation_exprt operator< (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } - // inline binary_relation_exprt operator< (const exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs); } + inline binary_relation_exprt strictly_shorter (const string_exprt & rhs) const + { return binary_relation_exprt(length(), ID_lt, rhs.length()); } + inline binary_relation_exprt strictly_shorter (const exprt & rhs) const + { return binary_relation_exprt(length(), ID_lt, rhs); } + inline equal_exprt same_length (const string_exprt & rhs) const + { return equal_exprt(length(), rhs.length()); } + inline equal_exprt has_length (const exprt & rhs) const + { return equal_exprt(length(), rhs); } + inline equal_exprt has_length (int i) const + { return has_length(refined_string_typet::index_of_int(i)); } static irep_idt extract_java_string(const symbol_exprt & s); - void of_string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type, axiom_vect &axioms); - static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9df31ab79d2..1dd2c18ab42 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -49,6 +49,37 @@ void string_refinementt::display_index_set() { } } +// We compute the index set for all formulas, instantiate the formulas +// with the found indexes, and add them as lemmas. +void string_refinementt::add_instantiations() +{ + debug() << "string_constraint_generatort::add_instantiations: " + << "going through the current index set:" << eom; + for (std::map::iterator i = current_index_set.begin(), + end = current_index_set.end(); i != end; ++i) { + const exprt &s = i->first; + debug() << "IS(" << pretty_short(s) << ") == {"; + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) + debug() << pretty_short (*j) << "; "; + debug() << "}" << eom; + + + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); + j != end; ++j) { + const exprt &val = *j; + + for (size_t k = 0; k < universal_axioms.size(); ++k) { + assert(universal_axioms[k].is_univ_quant()); + string_constraintt lemma = instantiate(universal_axioms[k], s, val); + assert(lemma.is_simple()); + add_lemma(lemma); + } + } + } +} + literalt string_refinementt::convert_rest(const exprt &expr) { if(expr.id()==ID_function_application) @@ -130,8 +161,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_function_application(const function_application_exprt &expr) { - const exprt &name = expr.function(); - debug() << "string_refinementt::convert_function_application " << name << eom; + debug() << "string_refinementt::convert_function_application " << pretty_short(expr) << eom; exprt f = generator.function_application(expr); return convert_bv(f); } @@ -152,7 +182,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) if(refined_string_typet::is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); - generator.make_string(sym,expr.rhs()); + generator.string_of_expr(sym,expr.rhs()); return false; } else if(type == generator.get_char_type()) @@ -662,7 +692,7 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) { } -void string_refinementt::initial_index_set(const axiom_vect & string_axioms) { +void string_refinementt::initial_index_set(const std::vector & string_axioms) { for (size_t i = 0; i < string_axioms.size(); ++i) { initial_index_set(string_axioms[i]); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index dc2cde3d5af..6bc0677b808 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -35,9 +35,6 @@ class string_refinementt: public bv_refinementt virtual std::string decision_procedure_text() const { return "string refinement loop with "+prop.solver_text(); } - symbol_exprt fresh_index(const irep_idt &prefix); - symbol_exprt fresh_boolean(const irep_idt &prefix); - static exprt is_positive(const exprt & x); private: @@ -74,9 +71,9 @@ class string_refinementt: public bv_refinementt // Simple constraints that have been given to the solver expr_sett seen_instances; // - axiom_vect universal_axioms; + std::vector universal_axioms; // - axiom_vect not_contains_axioms; + std::vector not_contains_axioms; int nb_sat_iteration; @@ -94,11 +91,6 @@ class string_refinementt: public bv_refinementt // Tells if there is a index in the index set where the same variable occurs several time. bool variable_with_multiple_occurence_in_index; - - std::map pool; - std::map hash; - - // Natural number expression corresponding to a constant integer constant_exprt constant_of_nat(int i,typet t); @@ -119,7 +111,7 @@ class string_refinementt: public bv_refinementt void update_index_set(const exprt &formula); void update_index_set(const std::vector &cur); void initial_index_set(const string_constraintt &axiom); - void initial_index_set(const axiom_vect &string_axioms); + void initial_index_set(const std::vector &string_axioms); // Takes an universaly quantified formula [axiom], // an array of char variable [s], and an index expression [val]. From 103628f0bf44db8f541364fc6184517052e69d2d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 19 Oct 2016 23:11:55 +0100 Subject: [PATCH 153/221] corected problems after restructuration --- .../string_constraint_generator.cpp | 243 +++++++++--------- .../refinement/string_constraint_generator.h | 4 +- src/solvers/refinement/string_refinement.cpp | 4 +- 3 files changed, 124 insertions(+), 127 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 99e3e2e7cc1..14257d5c5aa 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -13,6 +13,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include + constant_exprt string_constraint_generatort::constant_char(int i) { switch(language) @@ -27,8 +28,6 @@ constant_exprt string_constraint_generatort::constant_char(int i) } - - constant_exprt string_constraint_generatort::constant_unsigned(int i, size_t width) { return constant_exprt(integer2binary(i,width),unsignedbv_typet(width)); } @@ -88,6 +87,8 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine { string_exprt s; + check_char_type(unrefined_string); + if(unrefined_string.id() == ID_function_application) { exprt res = function_application(to_function_application_expr(unrefined_string)); @@ -167,136 +168,130 @@ string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & exprt string_constraint_generatort::function_application(const function_application_exprt & expr) { const exprt &name = expr.function(); - - if (name.id() == ID_symbol) { - const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (starts_with(id,cprover_string_literal_func) - || starts_with(id,cprover_string_concat_func) - || starts_with(id,cprover_string_substring_func) - || starts_with(id,cprover_string_char_set_func)) { - string_exprt str = string_of_expr(expr); - return str; - } else if (starts_with(id,cprover_char_literal_func)) - return char_literal(expr); - else if (starts_with(id,cprover_string_length_func)) - return string_length(expr); - else if (starts_with(id,cprover_string_equal_func)) - return string_equal(expr); - else if (starts_with(id,cprover_string_equals_ignore_case_func)) - return string_equals_ignore_case(expr); - else if (starts_with(id,cprover_string_is_empty_func)) - return string_is_empty(expr); - else if (starts_with(id,cprover_string_char_at_func)) - return string_char_at(expr); - else if (starts_with(id,cprover_string_is_prefix_func)) - return string_is_prefix(expr); - else if (starts_with(id,cprover_string_is_suffix_func)) - return string_is_suffix(expr); - else if (starts_with(id,cprover_string_startswith_func)) - return string_is_prefix(expr,true); - else if (starts_with(id,cprover_string_endswith_func)) - return string_is_suffix(expr,true); - else if (starts_with(id,cprover_string_contains_func)) - return string_contains(expr); - else if (starts_with(id,cprover_string_hash_code_func)) - return string_hash_code(expr); - else if (starts_with(id,cprover_string_index_of_func)) - return string_index_of(expr); - else if (starts_with(id,cprover_string_last_index_of_func)) - return string_last_index_of(expr); - else if (starts_with(id,cprover_string_parse_int_func)) - return string_parse_int(expr); - else if (starts_with(id,cprover_string_to_char_array_func)) - return string_to_char_array(expr); - else if (starts_with(id,cprover_string_code_point_at_func)) - return string_code_point_at(expr); - else if (starts_with(id,cprover_string_code_point_before_func)) - return string_code_point_before(expr); - else if (starts_with(id,cprover_string_code_point_count_func)) - return string_code_point_count(expr); - else if (starts_with(id,cprover_string_offset_by_code_point_func)) - return string_offset_by_code_point(expr); - else if (starts_with(id,cprover_string_compare_to_func)) - return string_compare_to(expr); - else if(starts_with(id,cprover_string_literal_func)) - return string_literal(expr); - else if(starts_with(id,cprover_string_concat_func)) - return string_concat(expr); - else if(starts_with(id,cprover_string_concat_int_func)) - return string_concat_int(expr); - else if(starts_with(id,cprover_string_concat_long_func)) - return string_concat_long(expr); - else if(starts_with(id,cprover_string_concat_bool_func)) + assert(name.id() == ID_symbol); + + const irep_idt &id = to_symbol_expr(name).get_identifier(); + if (starts_with(id,cprover_char_literal_func)) + return char_literal(expr); + else if (starts_with(id,cprover_string_length_func)) + return string_length(expr); + else if (starts_with(id,cprover_string_equal_func)) + return string_equal(expr); + else if (starts_with(id,cprover_string_equals_ignore_case_func)) + return string_equals_ignore_case(expr); + else if (starts_with(id,cprover_string_is_empty_func)) + return string_is_empty(expr); + else if (starts_with(id,cprover_string_char_at_func)) + return string_char_at(expr); + else if (starts_with(id,cprover_string_is_prefix_func)) + return string_is_prefix(expr); + else if (starts_with(id,cprover_string_is_suffix_func)) + return string_is_suffix(expr); + else if (starts_with(id,cprover_string_startswith_func)) + return string_is_prefix(expr,true); + else if (starts_with(id,cprover_string_endswith_func)) + return string_is_suffix(expr,true); + else if (starts_with(id,cprover_string_contains_func)) + return string_contains(expr); + else if (starts_with(id,cprover_string_hash_code_func)) + return string_hash_code(expr); + else if (starts_with(id,cprover_string_index_of_func)) + return string_index_of(expr); + else if (starts_with(id,cprover_string_last_index_of_func)) + return string_last_index_of(expr); + else if (starts_with(id,cprover_string_parse_int_func)) + return string_parse_int(expr); + else if (starts_with(id,cprover_string_to_char_array_func)) + return string_to_char_array(expr); + else if (starts_with(id,cprover_string_code_point_at_func)) + return string_code_point_at(expr); + else if (starts_with(id,cprover_string_code_point_before_func)) + return string_code_point_before(expr); + else if (starts_with(id,cprover_string_code_point_count_func)) + return string_code_point_count(expr); + else if (starts_with(id,cprover_string_offset_by_code_point_func)) + return string_offset_by_code_point(expr); + else if (starts_with(id,cprover_string_compare_to_func)) + return string_compare_to(expr); + else if(starts_with(id,cprover_string_literal_func)) + return string_literal(expr); + else if(starts_with(id,cprover_string_concat_func)) + return string_concat(expr); + else if(starts_with(id,cprover_string_concat_int_func)) + return string_concat_int(expr); + else if(starts_with(id,cprover_string_concat_long_func)) + return string_concat_long(expr); + else if(starts_with(id,cprover_string_concat_bool_func)) return string_concat_bool(expr); - else if(starts_with(id,cprover_string_concat_char_func)) - return string_concat_char(expr); - else if(starts_with(id,cprover_string_concat_double_func)) - return string_concat_double(expr); - else if(starts_with(id,cprover_string_concat_float_func)) - return string_concat_float(expr); - else if(starts_with(id,cprover_string_concat_code_point_func)) - return string_concat_code_point(expr); - else if(starts_with(id,cprover_string_insert_func)) - return string_insert(expr); - else if(starts_with(id,cprover_string_insert_int_func)) - return string_insert_int(expr); - else if(starts_with(id,cprover_string_insert_long_func)) - return string_insert_long(expr); - else if(starts_with(id,cprover_string_insert_bool_func)) - return string_insert_bool(expr); - else if(starts_with(id,cprover_string_insert_char_func)) - return string_insert_char(expr); - else if(starts_with(id,cprover_string_insert_double_func)) - return string_insert_double(expr); - else if(starts_with(id,cprover_string_insert_float_func)) - return string_insert_float(expr); - else if(starts_with(id,cprover_string_substring_func)) + else if(starts_with(id,cprover_string_concat_char_func)) + return string_concat_char(expr); + else if(starts_with(id,cprover_string_concat_double_func)) + return string_concat_double(expr); + else if(starts_with(id,cprover_string_concat_float_func)) + return string_concat_float(expr); + else if(starts_with(id,cprover_string_concat_code_point_func)) + return string_concat_code_point(expr); + else if(starts_with(id,cprover_string_insert_func)) + return string_insert(expr); + else if(starts_with(id,cprover_string_insert_int_func)) + return string_insert_int(expr); + else if(starts_with(id,cprover_string_insert_long_func)) + return string_insert_long(expr); + else if(starts_with(id,cprover_string_insert_bool_func)) + return string_insert_bool(expr); + else if(starts_with(id,cprover_string_insert_char_func)) + return string_insert_char(expr); + else if(starts_with(id,cprover_string_insert_double_func)) + return string_insert_double(expr); + else if(starts_with(id,cprover_string_insert_float_func)) + return string_insert_float(expr); + else if(starts_with(id,cprover_string_substring_func)) return string_substring(expr); - else if(starts_with(id,cprover_string_trim_func)) - return string_trim(expr); - else if(starts_with(id,cprover_string_to_lower_case_func)) - return string_to_lower_case(expr); - else if(starts_with(id,cprover_string_to_upper_case_func)) - return string_to_upper_case(expr); - else if(starts_with(id,cprover_string_char_set_func)) + else if(starts_with(id,cprover_string_trim_func)) + return string_trim(expr); + else if(starts_with(id,cprover_string_to_lower_case_func)) + return string_to_lower_case(expr); + else if(starts_with(id,cprover_string_to_upper_case_func)) + return string_to_upper_case(expr); + else if(starts_with(id,cprover_string_char_set_func)) return string_char_set(expr); - else if(starts_with(id,cprover_string_value_of_func)) - return string_value_of(expr); - else if(starts_with(id,cprover_string_empty_string_func)) - return empty_string(expr); - else if(starts_with(id,cprover_string_copy_func)) - return string_copy(expr); - else if(starts_with(id,cprover_string_of_int_func)) - return of_int(expr); - else if(starts_with(id,cprover_string_of_int_hex_func)) - return of_int_hex(expr); - else if(starts_with(id,cprover_string_of_float_func)) + else if(starts_with(id,cprover_string_value_of_func)) + return string_value_of(expr); + else if(starts_with(id,cprover_string_empty_string_func)) + return empty_string(expr); + else if(starts_with(id,cprover_string_copy_func)) + return string_copy(expr); + else if(starts_with(id,cprover_string_of_int_func)) + return of_int(expr); + else if(starts_with(id,cprover_string_of_int_hex_func)) + return of_int_hex(expr); + else if(starts_with(id,cprover_string_of_float_func)) return of_float(expr); - else if(starts_with(id,cprover_string_of_double_func)) - return of_double(expr); - else if(starts_with(id,cprover_string_of_long_func)) - return of_long(expr); - else if(starts_with(id,cprover_string_of_bool_func)) - return of_bool(expr); - else if(starts_with(id,cprover_string_of_char_func)) - return of_char(expr); - else if(starts_with(id,cprover_string_set_length_func)) - return string_set_length(expr); - else if(starts_with(id,cprover_string_delete_func)) - return string_delete(expr); - else if(starts_with(id,cprover_string_delete_char_at_func)) - return string_delete_char_at(expr); - else if(starts_with(id,cprover_string_replace_func)) - return string_replace(expr); - else if(starts_with(id,cprover_string_format_func)) - return string_format(expr); - else { + else if(starts_with(id,cprover_string_of_double_func)) + return of_double(expr); + else if(starts_with(id,cprover_string_of_long_func)) + return of_long(expr); + else if(starts_with(id,cprover_string_of_bool_func)) + return of_bool(expr); + else if(starts_with(id,cprover_string_of_char_func)) + return of_char(expr); + else if(starts_with(id,cprover_string_set_length_func)) + return string_set_length(expr); + else if(starts_with(id,cprover_string_delete_func)) + return string_delete(expr); + else if(starts_with(id,cprover_string_delete_char_at_func)) + return string_delete_char_at(expr); + else if(starts_with(id,cprover_string_replace_func)) + return string_replace(expr); + else if(starts_with(id,cprover_string_format_func)) + return string_format(expr); + else + { std::string msg("string_exprt::function_application: unknown symbol :"); msg+=id.c_str(); throw msg; } - } - throw "string_constraint_generator::function_application: not a string function"; + } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 164a653bc00..670cd441a7e 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -164,13 +164,13 @@ class string_constraint_generatort { // Warning: this does not work at the moment because of the way we treat string pointers symbol_exprt string_intern(const function_application_exprt &f); + // Check that the given string is from the right language + void check_char_type(const exprt & str); private: enum {C, JAVA, UNKNOWN} language; - // Check that the given string is from the right language - void check_char_type(const exprt & str); inline bool use_c_string() {return (language == C);} diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 1dd2c18ab42..dcb3f22c94f 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -181,10 +181,12 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) if(refined_string_typet::is_unrefined_string_type(type)) { + generator.check_char_type(expr.lhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); generator.string_of_expr(sym,expr.rhs()); return false; } + /* else if(type == generator.get_char_type()) { const bvt &bv1=convert_bv(expr.rhs()); @@ -193,7 +195,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) map.set_literals(identifier, generator.get_char_type(), bv1); if(freeze_all) set_frozen(bv1); return false; - } + } */ else if(type==ns.follow(expr.rhs().type())) { if(is_unbounded_array(type)) return true; From b27b90dd7c6f2554e7e6936d4ec2e555cad5b003 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 10:14:03 +0100 Subject: [PATCH 154/221] repaired some type problems with methods of the code_point kind and compare --- .../string_constraint_generator.cpp | 100 +++++++++--------- .../refinement/string_constraint_generator.h | 1 + src/solvers/refinement/string_refinement.cpp | 15 +-- 3 files changed, 62 insertions(+), 54 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 14257d5c5aa..31f87006b2f 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -31,6 +31,9 @@ constant_exprt string_constraint_generatort::constant_char(int i) constant_exprt string_constraint_generatort::constant_unsigned(int i, size_t width) { return constant_exprt(integer2binary(i,width),unsignedbv_typet(width)); } +constant_exprt string_constraint_generatort::constant_signed(int i, size_t width) +{ return constant_exprt(integer2binary(i,width),signedbv_typet(width)); } + void string_constraint_generatort::check_char_type(const exprt & str) { if(language == C) @@ -82,7 +85,6 @@ symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix) } - string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) { string_exprt s; @@ -165,7 +167,8 @@ string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & } -exprt string_constraint_generatort::function_application(const function_application_exprt & expr) +exprt string_constraint_generatort::function_application +(const function_application_exprt & expr) { const exprt &name = expr.function(); assert(name.id() == ID_symbol); @@ -894,7 +897,9 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) { string_exprt res(get_char_type()); typet type = code_point.type(); - binary_relation_exprt small(code_point,ID_lt,constant_unsigned(0x010000,32)); + assert(type.id() == ID_signedbv); + size_t width = to_bitvector_type(type).get_width(); + binary_relation_exprt small(code_point,ID_lt,constant_signed(0x010000,width)); axioms.emplace_back(small, res.has_length(1)); axioms.emplace_back(not_exprt(small),res.has_length(2)); axioms.emplace_back(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type()))); @@ -903,15 +908,15 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) equal_exprt (res[0], typecast_exprt - (plus_exprt(constant_unsigned(0xD800,32), - div_exprt(minus_exprt(code_point,constant_unsigned(0x010000,32)),constant_unsigned(0x0400,32))), + (plus_exprt(constant_signed(0xD800,width), + div_exprt(minus_exprt(code_point,constant_signed(0x010000,width)),constant_signed(0x0400,width))), get_char_type()))); axioms.emplace_back(not_exprt(small), equal_exprt (res[1], typecast_exprt - (plus_exprt(constant_unsigned(0xDC00,32), - mod_exprt(code_point,constant_unsigned(0x0400,32))), + (plus_exprt(constant_signed(0xDC00,width), + mod_exprt(code_point,constant_signed(0x0400,width))), get_char_type()))); return res; } @@ -1550,8 +1555,8 @@ exprt string_constraint_generatort::string_parse_int exprt zero_char = constant_char(48); exprt minus_char = constant_char(45); exprt plus_char = constant_char(43); - // Not sure about the size - size_t width = 64; + assert(type.id() == ID_signedbv); + size_t width = to_bitvector_type(type).get_width(); constant_exprt ten(integer2binary(10,width),type); exprt chr = str[0]; @@ -1599,29 +1604,27 @@ exprt string_constraint_generatort::is_low_surrogate(const exprt & chr) exprt string_constraint_generatort::string_code_point_at ( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); typet return_type = f.type(); - string_exprt str = string_of_expr(args[0]); + string_exprt str = string_of_expr(args(f,2)[0]); + exprt pos = args(f,2)[1]; symbol_exprt result = string_exprt::fresh_symbol("char",return_type); + assert(return_type.id() == ID_signedbv); + size_t width = to_bitvector_type(return_type).get_width(); - exprt char1_as_int = typecast_exprt(str[args[1]],return_type); - exprt char2_as_int = typecast_exprt(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))],return_type); - - // Not sure about the width - size_t width = 64; - + exprt char1_as_int = typecast_exprt(str[pos],return_type); + exprt char2_as_int = typecast_exprt(str[plus_exprt(pos,refined_string_typet::index_of_int(1))],return_type); + exprt pair_value = plus_exprt - (constant_unsigned(0x010000,width), + (constant_signed(0x010000,width), (plus_exprt (mult_exprt - (mod_exprt(char1_as_int,constant_unsigned(0x0800,width)), - constant_unsigned(0x0400,width)), - mod_exprt(char2_as_int,constant_unsigned(0x0400,width))))); + (mod_exprt(char1_as_int,constant_signed(0x0800,width)), + constant_signed(0x0400,width)), + mod_exprt(char2_as_int,constant_signed(0x0400,width))))); - exprt return_pair = and_exprt(is_high_surrogate(str[args[1]]), - is_low_surrogate(str[plus_exprt(args[1],refined_string_typet::index_of_int(1))])); + exprt return_pair = and_exprt(is_high_surrogate(str[pos]), + is_low_surrogate(str[plus_exprt(pos,refined_string_typet::index_of_int(1))])); axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); axioms.emplace_back(not_exprt(return_pair), equal_exprt(result,char1_as_int)); @@ -1642,17 +1645,17 @@ exprt string_constraint_generatort::string_code_point_before exprt char2 = str[minus_exprt(args[1],refined_string_typet::index_of_int(1))]; exprt char2_as_int = typecast_exprt(char2,return_type); - // Not sure about the width - size_t width = 64; + assert(return_type.id() == ID_signedbv); + size_t width = to_bitvector_type(return_type).get_width(); exprt pair_value = plus_exprt - (constant_unsigned(0x010000,width), + (constant_signed(0x010000,width), (plus_exprt (mult_exprt - (mod_exprt(char1_as_int,constant_unsigned(0x0800,width)), - constant_unsigned(0x0400,width)), - mod_exprt(char2_as_int,constant_unsigned(0x0400,width))))); + (mod_exprt(char1_as_int,constant_signed(0x0800,width)), + constant_signed(0x0400,width)), + mod_exprt(char2_as_int,constant_signed(0x0400,width))))); exprt return_pair = and_exprt(is_high_surrogate(char1),is_low_surrogate(char2)); @@ -1665,11 +1668,9 @@ exprt string_constraint_generatort::string_code_point_before exprt string_constraint_generatort::string_code_point_count ( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt str = string_of_expr(args[0]); - exprt begin = args[1]; - exprt end = args[2]; + string_exprt str = string_of_expr(args(f,3)[0]); + exprt begin = args(f,3)[1]; + exprt end = args(f,3)[2]; typet return_type = f.type(); symbol_exprt result = string_exprt::fresh_symbol("code_point_count",return_type); exprt length = minus_exprt(end,begin); @@ -1682,11 +1683,9 @@ exprt string_constraint_generatort::string_code_point_count exprt string_constraint_generatort::string_offset_by_code_point ( const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 3); - string_exprt str = string_of_expr(args[0]); - exprt index = args[1]; - exprt offset = args[2]; + string_exprt str = string_of_expr(args(f,3)[0]); + exprt index = args(f,3)[1]; + exprt offset = args(f,3)[2]; typet return_type = f.type(); symbol_exprt result = string_exprt::fresh_symbol("offset_by_code_point",return_type); exprt minimum = plus_exprt(index,plus_exprt(index,offset)); @@ -1729,31 +1728,36 @@ exprt string_constraint_generatort::string_compare_to // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| // && forall i < x. res != 0 => s1[i] = s2[i] - // Not sure about the width - size_t width = 64; + assert(return_type.id() == ID_signedbv); + size_t width = to_bitvector_type(return_type).get_width(); symbol_exprt i = fresh_univ_index("QA_compare_to"); - equal_exprt res_null = equal_exprt(res,constant_unsigned(0,width)); + equal_exprt res_null = equal_exprt(res,constant_signed(0,width)); axioms.emplace_back(res_null, s1.same_length(s2)); - axioms.push_back(string_constraintt(res_null,equal_exprt(s1[i],s2[i])).forall(i,s1.length())); + axioms.push_back(string_constraintt + (res_null,equal_exprt(s1[i],s2[i])).forall(i,s1.length())); + symbol_exprt x = fresh_exist_index("index_compare_to"); axioms.push_back (implies_exprt (not_exprt(res_null), and_exprt - (binary_relation_exprt(x,ID_ge,constant_unsigned(0,width)), + (binary_relation_exprt(x,ID_ge,constant_signed(0,width)), or_exprt (and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), or_exprt - (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), and_exprt(s1.longer(s2),s2.strictly_longer(x)))), + (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), + and_exprt(s1.longer(s2),s2.strictly_longer(x)))), and_exprt - (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()),return_type)), + (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()), + return_type)), or_exprt (and_exprt(s2.strictly_longer(s1),s1.has_length(x)), and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); - axioms.push_back(string_constraintt(not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,x)); + axioms.push_back(string_constraintt + (not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,x)); return res; } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 670cd441a7e..f65f3890e96 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -19,6 +19,7 @@ class string_constraint_generatort { constant_exprt constant_char(int i); constant_exprt constant_unsigned(int i,size_t width); + constant_exprt constant_signed(int i,size_t width); unsignedbv_typet get_char_type(); size_t get_char_width(); inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index dcb3f22c94f..481fb0bbfb5 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -137,10 +137,12 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if (refined_string_typet::is_unrefined_string_type(type)) { + generator.check_char_type(expr); string_exprt str = generator.string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; } + /* else if (expr.type() == generator.get_char_type()) { bvt bv; @@ -154,7 +156,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) assert(false); } return bv; - } + } */ else return SUB::convert_symbol(expr); } @@ -256,6 +258,7 @@ decision_proceduret::resultt string_refinementt::dec_solve() while(initial_loop_bound-- > 0) { + print_time("string_refinementt::dec_solve"); decision_proceduret::resultt res = SUB::dec_solve(); @@ -275,11 +278,11 @@ decision_proceduret::resultt string_refinementt::dec_solve() update_index_set(cur); cur.clear(); add_instantiations(); - - if(variable_with_multiple_occurence_in_index) { - debug() << "WARNING: some variable appears multiple times" << eom; - return D_ERROR; - } + + if(variable_with_multiple_occurence_in_index) + { + debug() << "WARNING: some variable appears multiple times" << eom; + } if(current_index_set.empty()){ debug() << "current index set is empty" << eom; From 58d62ec80b038f483270da5f1473b673c81fd2ff Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 10:47:20 +0100 Subject: [PATCH 155/221] repaired an index problem with trim (case where length gets close to the largest integer) --- .../string_constraint_generator.cpp | 68 ++++++++----------- src/solvers/refinement/string_expr.h | 4 ++ 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 31f87006b2f..8b80b82c9a5 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -522,6 +522,7 @@ string_exprt string_constraint_generatort::string_trim axioms.emplace_back(binary_relation_exprt(idx, ID_ge, refined_string_typet::index_zero())); axioms.emplace_back(str.longer(idx)); axioms.emplace_back(res.longer(refined_string_typet::index_zero())); + axioms.emplace_back(res.shorter(str)); // necessary to prevent exceeding the biggest integer symbol_exprt n = fresh_univ_index("QA_index_trim"); // forall n < m, str[n] = ' ' @@ -642,10 +643,10 @@ string_exprt string_constraint_generatort::of_float unsigned width=bv_type.get_width(); exprt isneg = extractbit_exprt(f, width-1); - axioms.emplace_back(isneg, sign_string.has_length(refined_string_typet::index_of_int(1))); + axioms.emplace_back(isneg, sign_string.has_length(1)); - axioms.emplace_back(not_exprt(isneg), sign_string.has_length(refined_string_typet::index_of_int(0))); - axioms.emplace_back(isneg,equal_exprt(sign_string[refined_string_typet::index_of_int(0)], constant_char(0x2D))); + axioms.emplace_back(not_exprt(isneg), sign_string.has_length(0)); + axioms.emplace_back(isneg,equal_exprt(sign_string[0], constant_char(0x2D))); // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". @@ -756,12 +757,12 @@ string_exprt string_constraint_generatort::of_int { string_exprt res(get_char_type()); typet type = i.type(); - int width = type.get_unsigned_int(ID_width); - exprt ten = constant_unsigned(10,width); - exprt zero_char = constant_char(48); - exprt nine_char = constant_char(57); - exprt minus_char = constant_char(45); - + assert(type.id() == ID_signedbv); + size_t width = to_bitvector_type(type).get_width(); + exprt ten = constant_signed(10,width); + exprt zero_char = constant_char('0'); + exprt nine_char = constant_char('9'); + exprt minus_char = constant_char('-'); axioms.emplace_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), res.shorter(refined_string_typet::index_of_int(max_size)))); @@ -775,7 +776,7 @@ string_exprt string_constraint_generatort::of_int for(size_t size=1; size<=max_size;size++) { - exprt sum = constant_unsigned(0,width); + exprt sum = constant_signed(0,width); exprt all_numbers = true_exprt(); chr = res[0]; exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); @@ -811,7 +812,7 @@ string_exprt string_constraint_generatort::of_int // Warning this should be different depending on max size if(size == max_size) { - exprt smallest_with_10_digits = constant_unsigned(1000000000,width); + exprt smallest_with_10_digits = constant_signed(1000000000,width); axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); } } @@ -834,8 +835,9 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) { string_exprt res(get_char_type()); typet type = i.type(); - int width = type.get_unsigned_int(ID_width); - exprt sixteen = constant_unsigned(16,width); + assert(type.id() == ID_signedbv); + size_t width = to_bitvector_type(type).get_width(); + exprt sixteen = constant_signed(16,width); exprt minus_char = constant_char(45); exprt zero_char = constant_char(48); exprt nine_char = constant_char(57); @@ -843,12 +845,12 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) exprt f_char = constant_char(0x66); size_t max_size = 8; - axioms.emplace_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), - res.shorter(refined_string_typet::index_of_int(max_size)))); + axioms.emplace_back(and_exprt(res.strictly_longer(0), + res.shorter(max_size))); for(size_t size=1; size<=max_size;size++) { - exprt sum = constant_unsigned(0,width); + exprt sum = constant_signed(0,width); exprt all_numbers = true_exprt(); exprt chr = res[0]; @@ -1370,17 +1372,21 @@ exprt string_constraint_generatort::string_index_of // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) // && forall n. from_index <= n < i => s[n] != c - axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),str.length())); + axioms.push_back(string_constraintt + (equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains) + ).exists(index,refined_string_typet::index_of_int(-1),str.length())); axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = fresh_univ_index("QA_index_of"); - - axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); + axioms.push_back(string_constraintt + (contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); symbol_exprt m = fresh_univ_index("QA_index_of"); - axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index,str.length())); + axioms.push_back(string_constraintt + (not_exprt(contains),not_exprt(equal_exprt(str[m],c)) + ).forall(m,from_index,str.length())); return index; } @@ -1441,16 +1447,7 @@ exprt string_constraint_generatort::string_index_of return string_index_of_string(str,sub,from_index); } else - { - if(!(c.type() == get_char_type())) - { - std::string msg("argument to string_index_of does not have char type "); - msg += c.type().pretty(); - throw msg; - c = typecast_exprt(c,get_char_type()); - } - return string_index_of(str,c,from_index); - } + return string_index_of(str,typecast_exprt(c,get_char_type()),from_index); } exprt string_constraint_generatort::string_last_index_of @@ -1495,16 +1492,7 @@ exprt string_constraint_generatort::string_last_index_of return string_last_index_of_string(str,sub,from_index); } else - { - if(!(c.type() == get_char_type())) - { - std::string msg("warning: argument to string_index_of does not have char type: "); - msg += c.type().pretty(); - throw msg; - c = typecast_exprt(c,get_char_type()); - } - return string_last_index_of(str,c,from_index); - } + return string_last_index_of(str,typecast_exprt(c,get_char_type()),from_index); } exprt string_constraint_generatort::char_literal diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 4b8860573d7..2c0a3c4dc56 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -55,10 +55,14 @@ class string_exprt : public struct_exprt { { return binary_relation_exprt(rhs, ID_lt, length()); } inline binary_relation_exprt strictly_longer (const string_exprt & rhs) const { return binary_relation_exprt(rhs.length(), ID_lt, length()); } + inline binary_relation_exprt strictly_longer (int i) const + { return strictly_longer(refined_string_typet::index_of_int(i)); } inline binary_relation_exprt shorter (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs.length()); } inline binary_relation_exprt shorter (const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } + inline binary_relation_exprt shorter (int i) const + { return shorter(refined_string_typet::index_of_int(i)); } inline binary_relation_exprt strictly_shorter (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } inline binary_relation_exprt strictly_shorter (const exprt & rhs) const From eeea178e083a61b1b5b54536ad77a2c3c3a7f20c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 11:22:41 +0100 Subject: [PATCH 156/221] repaired some type problems with integers --- regression/strings/cprover-string-hack.h | 4 ++-- regression/strings/test_int/test.c | 4 ++-- src/solvers/refinement/string_constraint_generator.cpp | 5 +++-- src/solvers/refinement/string_refinement.cpp | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 8a560e9d70d..136633390b5 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -68,6 +68,6 @@ extern int __CPROVER_uninterpreted_string_index_of_func(__CPROVER_string str, __ extern int __CPROVER_uninterpreted_string_last_index_of_func(__CPROVER_string str, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_char_set_func(__CPROVER_string str, int pos, __CPROVER_char c); extern __CPROVER_string __CPROVER_uninterpreted_string_copy_func(__CPROVER_string str); -extern unsigned __CPROVER_uninterpreted_string_parse_int_func(__CPROVER_string str); -extern __CPROVER_string __CPROVER_uninterpreted_string_of_int_func(unsigned i); +extern int __CPROVER_uninterpreted_string_parse_int_func(__CPROVER_string str); +extern __CPROVER_string __CPROVER_uninterpreted_string_of_int_func(int i); diff --git a/regression/strings/test_int/test.c b/regression/strings/test_int/test.c index 3f8f8651783..28aa9c7e156 100644 --- a/regression/strings/test_int/test.c +++ b/regression/strings/test_int/test.c @@ -5,12 +5,12 @@ int main() { __CPROVER_string s; - unsigned i = 10; + int i = 10; s = __CPROVER_string_of_int(123); assert(__CPROVER_char_at(s,0) == '1'); assert(__CPROVER_char_at(s,1) == '2'); - unsigned j = __CPROVER_parse_int(__CPROVER_string_literal("234")); + int j = __CPROVER_parse_int(__CPROVER_string_literal("234")); assert(j == 234); assert(j < 233 || __CPROVER_char_at(s,2) == '4'); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 8b80b82c9a5..6e555383502 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -383,8 +383,9 @@ string_exprt string_constraint_generatort::string_concat(const string_exprt & s1 { // |res| = |s1| + |s2| string_exprt res(get_char_type()); - equal_exprt length_sum_lem = res.has_length(plus_exprt(s1.length(), s2.length())); - axioms.emplace_back(length_sum_lem); + axioms.emplace_back(res.has_length(plus_exprt(s1.length(), s2.length()))); + axioms.emplace_back(s1.shorter(res)); // we have to be careful about very long strings + axioms.emplace_back(s2.shorter(res)); // forall i<|s1|. res[i] = s1[i] symbol_exprt idx = fresh_univ_index("QA_index_concat"); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 481fb0bbfb5..f47506c432e 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -84,7 +84,7 @@ literalt string_refinementt::convert_rest(const exprt &expr) { if(expr.id()==ID_function_application) { - assert(false); // can this occur? + // can occur in __CPROVER_assume bvt bv = convert_function_application(to_function_application_expr(expr)); assert(bv.size() == 1); return bv[0]; From 14e21c09565dedccfb5962f4a2c62aea7c1a387f Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 18:46:04 +0100 Subject: [PATCH 157/221] starting to use map for pass preprocessing --- src/cbmc/cbmc_parse_options.cpp | 2 +- src/goto-programs/pass_preprocess.cpp | 239 +++++++++++-------- src/goto-programs/pass_preprocess.h | 32 ++- src/solvers/refinement/string_refinement.cpp | 9 +- 4 files changed, 181 insertions(+), 101 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 0ac16a59fec..e5c81ff7e86 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -920,7 +920,7 @@ bool cbmc_parse_optionst::process_goto_program( if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; - pass_preprocess(symbol_table, goto_functions); + pass_preprocesst(symbol_table, goto_functions,ns); } // remove returns, gcc vectors, complex diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 801113b166b..0a708624bd2 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -9,16 +9,18 @@ Date: September 2016 \*******************************************************************/ -#include -#include - #include "pass_preprocess.h" +#include +#include +#include #include #include -void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt::instructionst::iterator & i_it, irep_idt function_name) { + +void pass_preprocesst::make_string_function +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" // Warning: in pass_preprocess::make_string_function: // we should introduce an intermediary variable for each argument @@ -41,15 +43,45 @@ void make_string_function(symbol_tablet & symbol_table, goto_functionst & goto_f rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); for(unsigned i = 0; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); code_assignt assignment(function_call.lhs(), rhs); assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); i_it->code=assignment; } -void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt::instructionst::iterator & i_it, irep_idt function_name){ +void pass_preprocesst::make_array_function +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + // replace "lhs=s.toCharArray()" by "lhs=MALLOC(struct java::array[char],s->length)" + // we produce a malloc side-effect, which stays + typet object_type = function_call.type(); + exprt object_size = size_of_expr(object_type, ns); + + if(object_size.is_nil()) + { + error().source_location=function_call.lhs().find_source_location(); + error() << "do_java_new got nil object_size" << eom; + throw 0; + } + + side_effect_exprt malloc_expr(ID_malloc); + malloc_expr.copy_to_operands(object_size); + malloc_expr.type()=pointer_typet(object_type); + + //i_it = goto_program.insert_after(i_it); + //i_it->make_assignment(); + //i_it->code=assignment2; + //goto_programt::targett t_n=i_it.add_instruction(ASSIGN); + i_it->make_assignment(); + i_it->code=code_assignt(function_call.lhs(), malloc_expr); + i_it->source_location=function_call.source_location(); + +} + +void pass_preprocesst::make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ assert(i_it->is_assign()); code_assignt &assign=to_code_assign(i_it->code); typet old_type=assign.rhs().type(); @@ -60,7 +92,7 @@ void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functions tmp_symbol.name=function_name; symbol_table.add(tmp_symbol); - exprt rhs = replace_string_literals(symbol_table,goto_functions,assign.rhs().op0()); + exprt rhs = replace_string_literals(assign.rhs().op0()); /*function_application_exprt rhs; rhs.type()=old_type; rhs.add_source_location()=assign.source_location(); @@ -73,8 +105,9 @@ void make_string_function_of_assign(symbol_tablet & symbol_table, goto_functions goto_functions.function_map[irep_idt(function_name)]; } -void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt::instructionst::iterator & i_it, irep_idt function_name){ +void pass_preprocesst::make_string_function_call +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -90,7 +123,7 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); for(unsigned i = 1; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); code_assignt assignment(function_call.arguments()[0], rhs); assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); @@ -99,10 +132,10 @@ void make_string_function_call(symbol_tablet & symbol_table, goto_functionst & g goto_functions.function_map[irep_idt(function_name)]; } -void make_string_function_side_effect -(symbol_tablet & symbol_table, goto_functionst & goto_functions, - goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name, std::map & string_builders){ +void pass_preprocesst::make_string_function_side_effect +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name) +{ // replace "s.append(x)" by "s=__CPROVER_uninterpreted_string_concat(s,x)" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -119,7 +152,7 @@ void make_string_function_side_effect rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); for(unsigned i = 0; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(symbol_table,goto_functions,function_call.arguments()[i])); + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); //code_assignt assignment(dereference_exprt(function_call.arguments()[0]), rhs); code_assignt assignment(function_call.arguments()[0], rhs); //code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); @@ -139,8 +172,7 @@ void make_string_function_side_effect } - -bool has_java_string_type(const exprt &expr) +bool pass_preprocesst::has_java_string_type(const exprt &expr) { const typet type = expr.type(); if(type.id() == ID_pointer) { @@ -152,8 +184,10 @@ bool has_java_string_type(const exprt &expr) } else return false; } else return false; } -void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_functions, - goto_functionst::function_mapt::iterator f_it) + + +void pass_preprocesst::replace_string_calls +(goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; // map several names of a string builder to a unique one @@ -171,22 +205,25 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu const irep_idt function_id= to_symbol_expr(function_call.function()).get_identifier(); + // Warning: this serie of tests should be reimplemented using a + // map + if(function_id == irep_idt("java::java.lang.String.charAt:(I)C") || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") ) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_char_at_func); + make_string_function(i_it,cprover_string_char_at_func); } else if(function_id == irep_idt("java::java.lang.String.codePointAt:(I)I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_at_func); + make_string_function(i_it,cprover_string_code_point_at_func); } else if(function_id == irep_idt("java::java.lang.String.codePointBefore:(I)I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_before_func); + make_string_function(i_it,cprover_string_code_point_before_func); } else if(function_id == irep_idt("java::java.lang.String.codePointCount:(II)I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_code_point_count_func); + make_string_function(i_it,cprover_string_code_point_count_func); } else if(function_id == irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_offset_by_code_point_func); + make_string_function(i_it,cprover_string_offset_by_code_point_func); } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_hash_code_func); + make_string_function(i_it,cprover_string_hash_code_func); } else if(function_id == irep_idt ("java::java.lang.String.indexOf:(I)I") @@ -197,7 +234,7 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt ("java::java.lang.String.indexOf:(Ljava/lang/String;I)I") ) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_index_of_func); + make_string_function(i_it,cprover_string_index_of_func); } else if(function_id == irep_idt ("java::java.lang.String.lastIndexOf:(I)I") || function_id == irep_idt @@ -207,63 +244,68 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu || function_id == irep_idt ("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I") ) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_last_index_of_func); + make_string_function(i_it,cprover_string_last_index_of_func); } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_concat_func); + make_string_function(i_it,cprover_string_concat_func); } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_length_func); + make_string_function(i_it,cprover_string_length_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_length_func); + make_string_function(i_it,cprover_string_length_func); } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_equal_func); + make_string_function(i_it,cprover_string_equal_func); } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_equals_ignore_case_func); + make_string_function(i_it,cprover_string_equals_ignore_case_func); } else if(function_id == irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;)Z") || function_id == irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z") ) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_startswith_func); + make_string_function(i_it,cprover_string_startswith_func); } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_endswith_func); + make_string_function(i_it,cprover_string_endswith_func); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_substring_func); + make_string_function(i_it,cprover_string_substring_func); } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") ) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_substring_func); + make_string_function(i_it,cprover_string_substring_func); } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_trim_func); + make_string_function(i_it,cprover_string_trim_func); } else if(function_id == irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_lower_case_func); + make_string_function(i_it,cprover_string_to_lower_case_func); } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_upper_case_func); + make_string_function(i_it,cprover_string_to_upper_case_func); } else if(function_id == irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_replace_func); + make_string_function(i_it,cprover_string_replace_func); } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_contains_func); + make_string_function(i_it,cprover_string_contains_func); } else if(function_id == irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_compare_to_func); + make_string_function(i_it,cprover_string_compare_to_func); } else if(function_id == irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_intern_func); + make_string_function(i_it,cprover_string_intern_func); } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_is_empty_func); + make_string_function(i_it,cprover_string_is_empty_func); } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { - make_string_function(symbol_table, goto_functions, i_it,cprover_string_to_char_array_func); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_func,string_builders); + make_array_function(i_it,cprover_string_to_char_array_func); + } else if(side_effect_functions.find(function_id) != side_effect_functions.end()) + { + make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); + } + /* + (function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { + make_string_function_side_effect(goto_program, i_it,cprover_string_concat_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_int_func,string_builders); + make_string_function_side_effect(goto_program, i_it,cprover_string_concat_int_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_long_func,string_builders); + make_string_function_side_effect(goto_program, i_it,cprover_string_concat_long_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_bool_func,string_builders); + make_string_function_side_effect(goto_program, i_it,cprover_string_concat_bool_func,string_builders); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_char_func,string_builders); @@ -304,82 +346,70 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu (symbol_table, goto_functions, goto_program, i_it, cprover_string_char_set_func,string_builders); } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, + make_string_function(i_it, cprover_string_copy_func); - } else if(function_id == irep_idt - ("java::java.lang.String.:(Ljava/lang/String;)V") - || function_id == irep_idt - ("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")) { - make_string_function_call(symbol_table, goto_functions, i_it, - cprover_string_copy_func); + } */ + else if(function_id == irep_idt + ("java::java.lang.String.:(Ljava/lang/String;)V") + || function_id == irep_idt + ("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")) { + make_string_function_call(i_it, cprover_string_copy_func); } else if(function_id == irep_idt ("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { - make_string_function_call(symbol_table, goto_functions, i_it, - cprover_string_copy_func); + make_string_function_call(i_it, cprover_string_copy_func); } else if(function_id == irep_idt("java::java.lang.String.:()V")) { - make_string_function_call(symbol_table, goto_functions, i_it, - cprover_string_empty_string_func); + make_string_function_call(i_it, cprover_string_empty_string_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { - make_string_function_call(symbol_table, goto_functions, i_it, - cprover_string_empty_string_func); + make_string_function_call(i_it, cprover_string_empty_string_func); } else if(function_id == irep_idt ("java::java.lang.Integer.toString:(I)Ljava/lang/String;") || function_id == irep_idt ("java::java.lang.String.valueOf:(I)Ljava/lang/String;") ) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_int_func); + make_string_function(i_it, cprover_string_of_int_func); } else if(function_id == irep_idt ("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_int_hex_func); + make_string_function(i_it, cprover_string_of_int_hex_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_long_func); + make_string_function(i_it, cprover_string_of_long_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(F)Ljava/lang/String;") ||function_id == irep_idt ("java::java.lang.Float.toString:(F)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_float_func); + make_string_function(i_it, cprover_string_of_float_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(D)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_double_func); + make_string_function(i_it, cprover_string_of_double_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_bool_func); + make_string_function(i_it, cprover_string_of_bool_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:(C)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_of_char_func); - + make_string_function(i_it, cprover_string_of_char_func); } else if(function_id == irep_idt ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_parse_int_func); + make_string_function(i_it, cprover_string_parse_int_func); } else if(function_id == irep_idt ("java::java.lang.String.valueOf:([CII)Ljava/lang/String;") ||function_id == irep_idt ("java::java.lang.String.valueOf:([C)Ljava/lang/String;") ) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_value_of_func); + make_string_function(i_it, cprover_string_value_of_func); + } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { + make_string_function(i_it, cprover_string_copy_func); } else if(function_id == irep_idt("java::java.lang.StringBuilder.setLength:(I)V")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it, - cprover_string_set_length_func,string_builders); + make_string_function_side_effect(goto_program, i_it, + cprover_string_set_length_func); } else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) { - make_string_function(symbol_table, goto_functions, i_it, - cprover_string_format_func); + make_string_function(i_it, cprover_string_format_func); } } } else { if(i_it->is_assign()) { code_assignt assignment = to_code_assign(i_it->code); - exprt new_rhs = replace_string_literals(symbol_table,goto_functions,assignment.rhs()); + exprt new_rhs = replace_string_literals(assignment.rhs()); code_assignt new_assignment(assignment.lhs(),new_rhs); new_assignment.add_source_location()=assignment.source_location(); i_it->make_assignment(); @@ -390,8 +420,8 @@ void replace_string_calls(symbol_tablet & symbol_table,goto_functionst & goto_fu return; } -exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & goto_functions, - const exprt & expr) { +exprt pass_preprocesst::replace_string_literals(const exprt & expr) +{ if(has_java_string_type(expr) ) { if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) { std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); @@ -414,10 +444,33 @@ exprt replace_string_literals(symbol_tablet & symbol_table,goto_functionst & got return expr; } -void pass_preprocess(symbol_tablet & symbol_table, goto_functionst & goto_functions){ + + pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, const namespacet & _ns) + : symbol_table(_symbol_table),goto_functions(_goto_functions), ns(_ns) + { + + + // initialiasing the function maps + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_int_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")] = cprover_string_concat_long_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")] = cprover_string_concat_bool_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")] = cprover_string_concat_char_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")] = cprover_string_concat_double_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")] = cprover_string_concat_float_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_code_point_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")] = cprover_string_delete_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")] = cprover_string_delete_char_at_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_insert_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")] = cprover_string_insert_int_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")] = cprover_string_insert_long_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = cprover_string_insert_bool_func; + Forall_goto_functions(it, goto_functions) { - replace_string_calls(symbol_table,goto_functions,it); + replace_string_calls(it); } } diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index c591ba2eced..840eacb5e93 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -13,9 +13,33 @@ Date: September 2016 #define CPROVER_PASS_PREPROCESS_H #include - - -exprt replace_string_literals(symbol_tablet &, goto_functionst &,const exprt & ); -void pass_preprocess(symbol_tablet &, goto_functionst &); +#include + +class pass_preprocesst:public messaget +{ + public: + pass_preprocesst(symbol_tablet &, goto_functionst &, const namespacet &); + + private: + symbol_tablet & symbol_table; + goto_functionst & goto_functions; + const namespacet & ns; + std::map string_builders; + std::map side_effect_functions; + + exprt replace_string_literals(const exprt & ); + + void make_string_function(goto_programt::instructionst::iterator &, irep_idt); + void make_array_function(goto_programt::instructionst::iterator &, irep_idt); + void make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name); + void make_string_function_call(goto_programt::instructionst::iterator & i_it, irep_idt function_name); + void make_string_function_side_effect + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name); + + bool has_java_string_type(const exprt &expr); + void replace_string_calls(goto_functionst::function_mapt::iterator f_it); + +}; #endif diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index f47506c432e..64aff4262a5 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -97,6 +97,7 @@ literalt string_refinementt::convert_rest(const exprt &expr) bvt string_refinementt::convert_pointer_type(const exprt &expr) { + /* if(expr.id()==ID_function_application) { assert(false); // can this occur? @@ -123,10 +124,12 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) return convert_bv(typecast_exprt(op,unsignedbv_typet(64))); } } - else{ - return SUB::convert_pointer_type(expr); - } + else + */ + { + return SUB::convert_pointer_type(expr); } + //} } bvt string_refinementt::convert_symbol(const exprt &expr) From ab6ceeec5e60cc931be4e47d4d65f14b1119885c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 18:54:00 +0100 Subject: [PATCH 158/221] starting to use map for pass preprocessing --- src/goto-programs/pass_preprocess.cpp | 178 +++++++------------------- src/goto-programs/pass_preprocess.h | 1 + 2 files changed, 49 insertions(+), 130 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 0a708624bd2..11df1684d08 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -213,142 +213,17 @@ void pass_preprocesst::replace_string_calls || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") ) { make_string_function(i_it,cprover_string_char_at_func); - } else if(function_id == irep_idt("java::java.lang.String.codePointAt:(I)I")) { - make_string_function(i_it,cprover_string_code_point_at_func); - } else if(function_id == irep_idt("java::java.lang.String.codePointBefore:(I)I")) { - make_string_function(i_it,cprover_string_code_point_before_func); - } else if(function_id == irep_idt("java::java.lang.String.codePointCount:(II)I")) { - make_string_function(i_it,cprover_string_code_point_count_func); - } else if(function_id == irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")) { - make_string_function(i_it,cprover_string_offset_by_code_point_func); - - } else if(function_id == irep_idt("java::java.lang.String.hashCode:()I")) { - make_string_function(i_it,cprover_string_hash_code_func); - } else if(function_id == irep_idt - ("java::java.lang.String.indexOf:(I)I") - || function_id == irep_idt - ("java::java.lang.String.indexOf:(II)I") - || function_id == irep_idt - ("java::java.lang.String.indexOf:(Ljava/lang/String;)I") - || function_id == irep_idt - ("java::java.lang.String.indexOf:(Ljava/lang/String;I)I") - ) { - make_string_function(i_it,cprover_string_index_of_func); - } else if(function_id == irep_idt - ("java::java.lang.String.lastIndexOf:(I)I") - || function_id == irep_idt - ("java::java.lang.String.lastIndexOf:(II)I") - || function_id == irep_idt - ("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I") - || function_id == irep_idt - ("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I") - ) { - make_string_function(i_it,cprover_string_last_index_of_func); - } else if(function_id == irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_concat_func); - } else if(function_id == irep_idt("java::java.lang.String.length:()I")) { - make_string_function(i_it,cprover_string_length_func); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.length:()I")) { - make_string_function(i_it,cprover_string_length_func); - } else if(function_id == irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")) { - make_string_function(i_it,cprover_string_equal_func); - } else if(function_id == irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")) { - make_string_function(i_it,cprover_string_equals_ignore_case_func); - } else if(function_id == irep_idt - ("java::java.lang.String.startsWith:(Ljava/lang/String;)Z") - || function_id == irep_idt - ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z") - ) { - make_string_function(i_it,cprover_string_startswith_func); - } else if(function_id == irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")) { - make_string_function(i_it,cprover_string_endswith_func); - } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_substring_func); - } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") - ) { - make_string_function(i_it,cprover_string_substring_func); - } else if(function_id == irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_trim_func); - } else if(function_id == irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_to_lower_case_func); - } else if(function_id == irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_to_upper_case_func); - } else if(function_id == irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_replace_func); - } else if(function_id == irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")) { - make_string_function(i_it,cprover_string_contains_func); - } else if(function_id == irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")) { - make_string_function(i_it,cprover_string_compare_to_func); - } else if(function_id == irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")) { - make_string_function(i_it,cprover_string_intern_func); - } else if(function_id == irep_idt("java::java.lang.String.isEmpty:()Z")) { - make_string_function(i_it,cprover_string_is_empty_func); } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { make_array_function(i_it,cprover_string_to_char_array_func); + } else if(string_functions.find(function_id) != string_functions.end()) + { + make_string_function(i_it,string_function[function_id]); + } } else if(side_effect_functions.find(function_id) != side_effect_functions.end()) { make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); } - /* - (function_id == irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(goto_program, i_it,cprover_string_concat_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(goto_program, i_it,cprover_string_concat_int_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(goto_program, i_it,cprover_string_concat_long_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(goto_program, i_it,cprover_string_concat_bool_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_char_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_double_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_float_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions,goto_program, i_it,cprover_string_concat_code_point_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_delete_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_delete_char_at_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_int_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_long_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_char_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ) { - make_string_function_side_effect(symbol_table, goto_functions, goto_program, i_it,cprover_string_insert_bool_func,string_builders); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.setCharAt:(IC)V")) { - // warning: this should return void type - make_string_function_side_effect - (symbol_table, goto_functions, goto_program, i_it, - cprover_string_char_set_func,string_builders); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { - make_string_function(i_it, - cprover_string_copy_func); - } */ else if(function_id == irep_idt ("java::java.lang.String.:(Ljava/lang/String;)V") || function_id == irep_idt @@ -449,8 +324,51 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) : symbol_table(_symbol_table),goto_functions(_goto_functions), ns(_ns) { + // initialiasing the function maps + string_functions[irep_idt("java::java.lang.String.codePointAt:(I)I")] = cprover_string_code_point_at_func; + string_functions[irep_idt("java::java.lang.String.codePointBefore:(I)I")] = cprover_string_code_point_before_func; + string_functions[irep_idt("java::java.lang.String.codePointCount:(II)I")] = cprover_string_code_point_count_func; + string_functions[irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")] = cprover_string_offset_by_code_point_func; + string_functions[irep_idt("java::java.lang.String.hashCode:()I")] = cprover_string_hash_code_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(I)I")] = cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(II)I")] = cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;)I")] = cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;I)I")] = cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(I)I")]=cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(II)I")]=cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]=cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]=cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")] = cprover_string_concat_func; + string_functions[irep_idt("java::java.lang.String.length:()I")] = cprover_string_length_func; + string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = cprover_string_length_func; + string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = + make_st cprover_string_equal_func; + string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = cprover_string_equals_ignore_case_func; + } else if(function_id == irep_idt + ("java::java.lang.String.startsWith:(Ljava/lang/String;)Z") + || function_id == irep_idt + ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z") + ) { + make_string_function(i_it,cprover_string_startswith_func); + string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = cprover_string_endswith_func; + string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; + } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") + || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") + ) { + make_string_function(i_it,cprover_string_substring_func); + string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = cprover_string_trim_func; + string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = cprover_string_to_lower_case_func; + string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = cprover_string_to_upper_case_func; + string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = cprover_string_replace_func; + string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = cprover_string_contains_func; + string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = cprover_string_compare_to_func; + string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = cprover_string_intern_func; + string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = cprover_string_is_empty_func; + - // initialiasing the function maps side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_int_func; diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 840eacb5e93..158369e0787 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -26,6 +26,7 @@ class pass_preprocesst:public messaget const namespacet & ns; std::map string_builders; std::map side_effect_functions; + std::map string_functions; exprt replace_string_literals(const exprt & ); From 219a603e5cf000318995cdb658699b626245e9bf Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 19:09:28 +0100 Subject: [PATCH 159/221] starting to use map for pass preprocessing --- src/goto-programs/pass_preprocess.cpp | 63 +++++++++++---------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 11df1684d08..bda916bf5de 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -214,16 +214,12 @@ void pass_preprocesst::replace_string_calls ) { make_string_function(i_it,cprover_string_char_at_func); - } else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) { + } else if(string_functions.find(function_id) != string_functions.end()) + make_string_function(i_it,string_function[function_id]); + else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_array_function(i_it,cprover_string_to_char_array_func); - } else if(string_functions.find(function_id) != string_functions.end()) - { - make_string_function(i_it,string_function[function_id]); - } - } else if(side_effect_functions.find(function_id) != side_effect_functions.end()) - { - make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); - } + else if(side_effect_functions.find(function_id) != side_effect_functions.end()) + make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); else if(function_id == irep_idt ("java::java.lang.String.:(Ljava/lang/String;)V") || function_id == irep_idt @@ -339,34 +335,27 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]=cprover_string_last_index_of_func; string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]=cprover_string_last_index_of_func; string_functions[irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")] = cprover_string_concat_func; - string_functions[irep_idt("java::java.lang.String.length:()I")] = cprover_string_length_func; - string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = cprover_string_length_func; - string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = - make_st cprover_string_equal_func; - string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = cprover_string_equals_ignore_case_func; - } else if(function_id == irep_idt - ("java::java.lang.String.startsWith:(Ljava/lang/String;)Z") - || function_id == irep_idt - ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z") - ) { - make_string_function(i_it,cprover_string_startswith_func); - string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = cprover_string_endswith_func; - string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; - } else if(function_id == irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;") - || function_id == irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;") - ) { - make_string_function(i_it,cprover_string_substring_func); - string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = cprover_string_trim_func; - string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = cprover_string_to_lower_case_func; - string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = cprover_string_to_upper_case_func; - string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = cprover_string_replace_func; - string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = cprover_string_contains_func; - string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = cprover_string_compare_to_func; - string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = cprover_string_intern_func; - string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = cprover_string_is_empty_func; + string_functions[irep_idt("java::java.lang.String.length:()I")] = cprover_string_length_func; + string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = cprover_string_length_func; + string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = cprover_string_equal_func; + string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = cprover_string_equals_ignore_case_func; + string_functions[irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")] = cprover_string_startswith_func; + string_functions[irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z")] = cprover_string_startswith_func; + string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = cprover_string_endswith_func; + string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;")] = cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = cprover_string_trim_func; + string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = cprover_string_to_lower_case_func; + string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = cprover_string_to_upper_case_func; + string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = cprover_string_replace_func; + string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = cprover_string_contains_func; + string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = cprover_string_compare_to_func; + string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = cprover_string_intern_func; + string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = cprover_string_is_empty_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; From 659427dc2f67cbfe2941eb73ab8ea2bdcb9159da Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 20 Oct 2016 21:53:07 +0100 Subject: [PATCH 160/221] using maps for pass preprocessing --- src/goto-programs/pass_preprocess.cpp | 99 +++++++++------------------ src/goto-programs/pass_preprocess.h | 1 + 2 files changed, 33 insertions(+), 67 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index bda916bf5de..7abf397029d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -205,76 +205,18 @@ void pass_preprocesst::replace_string_calls const irep_idt function_id= to_symbol_expr(function_call.function()).get_identifier(); + if(string_functions.find(function_id) != string_functions.end()) + make_string_function(i_it,string_functions[function_id]); + else if(side_effect_functions.find(function_id) != side_effect_functions.end()) + make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); + else if(string_function_calls.find(function_id) != string_function_calls.end()) + make_string_function_call(i_it, string_function_calls[function_id]); + // Warning: this serie of tests should be reimplemented using a // map - - if(function_id == irep_idt("java::java.lang.String.charAt:(I)C") - || function_id == irep_idt("java::java.lang.StringBuilder.charAt:(I)C") - || function_id == irep_idt("java::java.lang.CharSequence.charAt:(I)C") - ) { - make_string_function(i_it,cprover_string_char_at_func); - - } else if(string_functions.find(function_id) != string_functions.end()) - make_string_function(i_it,string_function[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_array_function(i_it,cprover_string_to_char_array_func); - else if(side_effect_functions.find(function_id) != side_effect_functions.end()) - make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); - else if(function_id == irep_idt - ("java::java.lang.String.:(Ljava/lang/String;)V") - || function_id == irep_idt - ("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")) { - make_string_function_call(i_it, cprover_string_copy_func); - } else if(function_id == irep_idt - ("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")) { - make_string_function_call(i_it, cprover_string_copy_func); - } else if(function_id == irep_idt("java::java.lang.String.:()V")) { - make_string_function_call(i_it, cprover_string_empty_string_func); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.:()V")) { - make_string_function_call(i_it, cprover_string_empty_string_func); - } else if(function_id == irep_idt - ("java::java.lang.Integer.toString:(I)Ljava/lang/String;") - || function_id == irep_idt - ("java::java.lang.String.valueOf:(I)Ljava/lang/String;") - ) { - make_string_function(i_it, cprover_string_of_int_func); - } else if(function_id == irep_idt - ("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_int_hex_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(L)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_long_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(F)Ljava/lang/String;") - ||function_id == irep_idt - ("java::java.lang.Float.toString:(F)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_float_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(D)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_double_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_bool_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:(C)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_of_char_func); - } else if(function_id == irep_idt - ("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")) { - make_string_function(i_it, cprover_string_parse_int_func); - } else if(function_id == irep_idt - ("java::java.lang.String.valueOf:([CII)Ljava/lang/String;") - ||function_id == irep_idt - ("java::java.lang.String.valueOf:([C)Ljava/lang/String;") - ) { - make_string_function(i_it, cprover_string_value_of_func); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_copy_func); - } else if(function_id == irep_idt("java::java.lang.StringBuilder.setLength:(I)V")) { - make_string_function_side_effect(goto_program, i_it, - cprover_string_set_length_func); - } else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) { - make_string_function(i_it, cprover_string_format_func); - } + } } else { @@ -356,7 +298,11 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = cprover_string_compare_to_func; string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = cprover_string_intern_func; string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = cprover_string_is_empty_func; - + string_functions[irep_idt("java::java.lang.String.charAt:(I)C")] = cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.StringBuilder.charAt:(I)C")] = cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.CharSequence.charAt:(I)C")] = cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")] = cprover_string_format_func; + string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = cprover_string_copy_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; @@ -374,6 +320,25 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")] = cprover_string_insert_long_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = cprover_string_insert_bool_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.setLength:(I)V")] = cprover_string_set_length_func; + + string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")] = cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")] = cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; + string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; + string_function_calls[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = cprover_string_of_int_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = cprover_string_of_int_func; + string_function_calls[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = cprover_string_of_int_hex_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = cprover_string_of_long_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = cprover_string_of_float_func; + string_function_calls[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = cprover_string_of_float_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = cprover_string_of_double_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; + string_function_calls[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; + string_function_calls[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; Forall_goto_functions(it, goto_functions) { diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 158369e0787..d01654f4b0b 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -27,6 +27,7 @@ class pass_preprocesst:public messaget std::map string_builders; std::map side_effect_functions; std::map string_functions; + std::map string_function_calls; exprt replace_string_literals(const exprt & ); From 97c23232b227963891691aeb8c3beabff140e495 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 21 Oct 2016 00:18:15 +0100 Subject: [PATCH 161/221] introducing a variable for temporary pointers --- src/cbmc/cbmc_parse_options.cpp | 2 +- src/config.inc | 1 + src/goto-programs/pass_preprocess.cpp | 33 +++++++++++++++++++-------- src/goto-programs/pass_preprocess.h | 4 ++-- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index e5c81ff7e86..359e90010d9 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -920,7 +920,7 @@ bool cbmc_parse_optionst::process_goto_program( if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; - pass_preprocesst(symbol_table, goto_functions,ns); + pass_preprocesst(symbol_table, goto_functions,ns,ui_message_handler); } // remove returns, gcc vectors, complex diff --git a/src/config.inc b/src/config.inc index f8a78536372..19b64895c90 100644 --- a/src/config.inc +++ b/src/config.inc @@ -2,6 +2,7 @@ BUILD_ENV = AUTO # Variables you may want to override +CXXFLAGS = -Wall -O0 -g -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic #CXXFLAGS = -Wall -O0 -g -Werror -Wno-long-long -Wno-sign-compare -Wno-parentheses -Wno-strict-aliasing -pedantic #CXXFLAGS = -std=c++11 diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 7abf397029d..f6f7ed2b3d4 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -55,29 +55,44 @@ void pass_preprocesst::make_array_function { code_function_callt &function_call=to_code_function_call(i_it->code); // replace "lhs=s.toCharArray()" by "lhs=MALLOC(struct java::array[char],s->length)" + + if(function_call.lhs().type().id()!=ID_pointer) + { + debug() << "the function call should return a pointer" << eom; + } + // we produce a malloc side-effect, which stays - typet object_type = function_call.type(); + typet object_type = function_call.lhs().type().subtype(); exprt object_size = size_of_expr(object_type, ns); + debug() << "doing malloc of size " << object_size.pretty() + << " for type " << object_type.pretty() << eom; + if(object_size.is_nil()) { - error().source_location=function_call.lhs().find_source_location(); - error() << "do_java_new got nil object_size" << eom; - throw 0; + debug() << "do_java_new got nil object_size" << eom; } side_effect_exprt malloc_expr(ID_malloc); malloc_expr.copy_to_operands(object_size); + debug() << "object size moved to operands" << eom; malloc_expr.type()=pointer_typet(object_type); + malloc_expr.add_source_location()=function_call.source_location(); //i_it = goto_program.insert_after(i_it); //i_it->make_assignment(); //i_it->code=assignment2; //goto_programt::targett t_n=i_it.add_instruction(ASSIGN); + debug() << "making assignement for " << function_call.lhs().pretty() << " <- " << malloc_expr.pretty() << eom; i_it->make_assignment(); - i_it->code=code_assignt(function_call.lhs(), malloc_expr); + debug() << "assign code : " << eom; + symbol_exprt lhs("tmp_assign",object_type); + code_assignt assign(lhs, malloc_expr); + debug() << assign.pretty()<< eom; + i_it->code=assign; + debug() << "location" << eom; i_it->source_location=function_call.source_location(); - + debug() << "finished" << eom; } void pass_preprocesst::make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name) @@ -212,8 +227,6 @@ void pass_preprocesst::replace_string_calls else if(string_function_calls.find(function_id) != string_function_calls.end()) make_string_function_call(i_it, string_function_calls[function_id]); - // Warning: this serie of tests should be reimplemented using a - // map else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_array_function(i_it,cprover_string_to_char_array_func); @@ -258,8 +271,8 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) } - pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, const namespacet & _ns) - : symbol_table(_symbol_table),goto_functions(_goto_functions), ns(_ns) +pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, const namespacet & _ns, message_handlert &_message_handler): + messaget(_message_handler), symbol_table(_symbol_table),goto_functions(_goto_functions), ns(_ns) { // initialiasing the function maps diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index d01654f4b0b..ffef16e86a5 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -13,12 +13,12 @@ Date: September 2016 #define CPROVER_PASS_PREPROCESS_H #include -#include +#include class pass_preprocesst:public messaget { public: - pass_preprocesst(symbol_tablet &, goto_functionst &, const namespacet &); + pass_preprocesst(symbol_tablet &, goto_functionst &, const namespacet &, message_handlert &); private: symbol_tablet & symbol_table; From 5f2cc798f290bbeb28944d8a1dab743ee6dd477a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Sun, 23 Oct 2016 20:56:55 +0100 Subject: [PATCH 162/221] pass preprocessing for functions returning pointers --- src/goto-programs/pass_preprocess.cpp | 78 ++++++++++++++++++--------- src/goto-programs/pass_preprocess.h | 2 +- src/goto-programs/remove_returns.cpp | 8 +++ 3 files changed, 61 insertions(+), 27 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index f6f7ed2b3d4..60eff47862a 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -51,51 +51,77 @@ void pass_preprocesst::make_string_function } void pass_preprocesst::make_array_function -(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name) { - code_function_callt &function_call=to_code_function_call(i_it->code); - // replace "lhs=s.toCharArray()" by "lhs=MALLOC(struct java::array[char],s->length)" + // replace "lhs=s.toCharArray()" with: + // tmp_assign = MALLOC(struct java::array[char],s->length) + // *tmp_assign = "function_name"() + // return_tmp1 = tmp_assign + code_function_callt &function_call=to_code_function_call(i_it->code); if(function_call.lhs().type().id()!=ID_pointer) - { debug() << "the function call should return a pointer" << eom; - } // we produce a malloc side-effect, which stays typet object_type = function_call.lhs().type().subtype(); exprt object_size = size_of_expr(object_type, ns); - debug() << "doing malloc of size " << object_size.pretty() - << " for type " << object_type.pretty() << eom; - if(object_size.is_nil()) - { debug() << "do_java_new got nil object_size" << eom; - } + + debug() << "adding the name " << function_name << " to the symbols" << eom; + goto_functions.function_map[irep_idt(function_name)]; + auxiliary_symbolt tmp_symbol; + tmp_symbol.base_name=function_name; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=function_name; + tmp_symbol.type=pointer_typet(object_type); + symbol_table.add(tmp_symbol); side_effect_exprt malloc_expr(ID_malloc); malloc_expr.copy_to_operands(object_size); - debug() << "object size moved to operands" << eom; malloc_expr.type()=pointer_typet(object_type); malloc_expr.add_source_location()=function_call.source_location(); + + function_application_exprt function_app; + function_app.type()=object_type; + function_app.add_source_location()=function_call.source_location(); + function_app.function()=symbol_exprt(function_name); + for(unsigned i = 0; i < function_call.arguments().size(); i++) + function_app.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + + auxiliary_symbolt tmp_assign_symbol; + tmp_assign_symbol.base_name="tmp_assign"; + tmp_assign_symbol.is_static_lifetime=false; + tmp_assign_symbol.mode=ID_java; + tmp_assign_symbol.name="tmp_assign"; + tmp_assign_symbol.type=pointer_typet(object_type); + symbol_table.add(tmp_assign_symbol); + + symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); + code_assignt assign1(tmp_assign, malloc_expr); + code_assignt assign2(dereference_exprt(tmp_assign,object_type), function_app); + code_assignt assign3(function_call.lhs(), tmp_assign); + auto location = function_call.source_location(); - //i_it = goto_program.insert_after(i_it); - //i_it->make_assignment(); - //i_it->code=assignment2; - //goto_programt::targett t_n=i_it.add_instruction(ASSIGN); - debug() << "making assignement for " << function_call.lhs().pretty() << " <- " << malloc_expr.pretty() << eom; i_it->make_assignment(); - debug() << "assign code : " << eom; - symbol_exprt lhs("tmp_assign",object_type); - code_assignt assign(lhs, malloc_expr); - debug() << assign.pretty()<< eom; - i_it->code=assign; - debug() << "location" << eom; - i_it->source_location=function_call.source_location(); - debug() << "finished" << eom; + i_it->code=assign1; + i_it->source_location = location; + i_it=goto_program.insert_after(i_it); + i_it->make_assignment(); + i_it->code=assign2; + i_it->source_location = location; + i_it=goto_program.insert_after(i_it); + i_it->make_assignment(); + i_it->code=assign3; + i_it->source_location = location; + } -void pass_preprocesst::make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +void pass_preprocesst::make_string_function_of_assign +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { assert(i_it->is_assign()); code_assignt &assign=to_code_assign(i_it->code); @@ -228,7 +254,7 @@ void pass_preprocesst::replace_string_calls make_string_function_call(i_it, string_function_calls[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) - make_array_function(i_it,cprover_string_to_char_array_func); + make_array_function(goto_program,i_it,cprover_string_to_char_array_func); } diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index ffef16e86a5..21dc9a9613f 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -32,7 +32,7 @@ class pass_preprocesst:public messaget exprt replace_string_literals(const exprt & ); void make_string_function(goto_programt::instructionst::iterator &, irep_idt); - void make_array_function(goto_programt::instructionst::iterator &, irep_idt); + void make_array_function(goto_programt & goto_program, goto_programt::instructionst::iterator &, irep_idt); void make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_string_function_call(goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_string_function_side_effect diff --git a/src/goto-programs/remove_returns.cpp b/src/goto-programs/remove_returns.cpp index 4a1320d4731..d9ffe06e011 100644 --- a/src/goto-programs/remove_returns.cpp +++ b/src/goto-programs/remove_returns.cpp @@ -73,6 +73,14 @@ void remove_returnst::replace_returns( symbol_tablet::symbolst::iterator s_it= symbol_table.symbols.find(function_id); + if(s_it==symbol_table.symbols.end()) + { + std::string str = "function symbol for "; + str += function_id.c_str(); + str += " not found"; + throw str; + } + assert(s_it!=symbol_table.symbols.end()); symbolt &function_symbol=s_it->second; From 51f7d841c859dee082434a25d63652ae428b2805 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 24 Oct 2016 14:51:40 +0100 Subject: [PATCH 163/221] pass preprocessing for toCharArray function, not complete but a simple example with length is working --- src/goto-programs/pass_preprocess.cpp | 91 ++++++++++++++++++++++++--- 1 file changed, 82 insertions(+), 9 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 60eff47862a..1217c2cd274 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -60,6 +60,7 @@ void pass_preprocesst::make_array_function // return_tmp1 = tmp_assign code_function_callt &function_call=to_code_function_call(i_it->code); + debug() << "function_call = " << function_call.pretty() << eom; if(function_call.lhs().type().id()!=ID_pointer) debug() << "the function call should return a pointer" << eom; @@ -84,13 +85,19 @@ void pass_preprocesst::make_array_function malloc_expr.copy_to_operands(object_size); malloc_expr.type()=pointer_typet(object_type); malloc_expr.add_source_location()=function_call.source_location(); + + side_effect_exprt malloc_expr_data(ID_malloc); + exprt array_size = constant_exprt(integer2binary(12,32),signedbv_typet(32)); + exprt char_size = constant_exprt(integer2binary(32,32),signedbv_typet(32)); + // this may not be correct + malloc_expr_data.copy_to_operands(mult_exprt(array_size,char_size)); + malloc_expr_data.type()=pointer_typet(object_type.subtype()); + malloc_expr_data.add_source_location()=function_call.source_location(); - function_application_exprt function_app; - function_app.type()=object_type; - function_app.add_source_location()=function_call.source_location(); - function_app.function()=symbol_exprt(function_name); - for(unsigned i = 0; i < function_call.arguments().size(); i++) - function_app.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + + assert(function_call.arguments().size() >= 1); + exprt string_argument = function_call.arguments()[0]; + typet string_argument_type = string_argument.type(); auxiliary_symbolt tmp_assign_symbol; tmp_assign_symbol.base_name="tmp_assign"; @@ -100,23 +107,87 @@ void pass_preprocesst::make_array_function tmp_assign_symbol.type=pointer_typet(object_type); symbol_table.add(tmp_assign_symbol); + auxiliary_symbolt tmp_string_symbol; + tmp_string_symbol.base_name="tmp_string"; + tmp_string_symbol.is_static_lifetime=false; + tmp_string_symbol.mode=ID_java; + tmp_string_symbol.name="tmp_string"; + tmp_string_symbol.type=string_argument_type.subtype(); + symbol_table.add(tmp_string_symbol); + + auxiliary_symbolt tmp_data_symbol; + tmp_data_symbol.base_name="tmp_data"; + tmp_data_symbol.is_static_lifetime=false; + tmp_data_symbol.mode=ID_java; + tmp_data_symbol.name="tmp_data"; + tmp_data_symbol.type=string_argument_type.subtype(); + symbol_table.add(tmp_data_symbol); + symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); code_assignt assign1(tmp_assign, malloc_expr); - code_assignt assign2(dereference_exprt(tmp_assign,object_type), function_app); - code_assignt assign3(function_call.lhs(), tmp_assign); + code_assignt assign2(member_exprt(dereference_exprt(tmp_assign,object_type),"data"), malloc_expr_data); + symbol_exprt tmp_string("tmp_string",string_argument_type.subtype()); + code_assignt assign3aux(tmp_string, dereference_exprt(function_call.arguments()[0])); + symbol_exprt tmp_data("tmp_data",string_argument_type.subtype()); + + // geting the length + auxiliary_symbolt tmp_length_symbol; + //tmp_symbol.base_name=base_name; + tmp_length_symbol.is_static_lifetime=false; + tmp_length_symbol.mode=ID_java; + tmp_length_symbol.name=cprover_string_length_func; + // tmp_symbol.type=type; + tmp_length_symbol.type=unsignedbv_typet(32); + symbol_table.add(tmp_length_symbol); + // make sure it is in the function map + goto_functions.function_map[cprover_string_length_func]; + + function_application_exprt rhs; + rhs.type()=unsignedbv_typet(32); + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(cprover_string_length_func); + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[0])); + + + //code_assignt assign3aux2(tmp_data, ; + code_assignt assign3(member_exprt + (dereference_exprt + (tmp_assign,object_type) + ,"length",signedbv_typet(32)), + //constant_exprt(integer2binary(12,32),signedbv_typet(32))); + typecast_exprt(rhs,signedbv_typet(32))); + //member_exprt(tmp_string,"length",signedbv_typet(32))); + //function_app); + code_assignt assign4(function_call.lhs(), tmp_assign); auto location = function_call.source_location(); + debug() << " ------------ ASSIGN1 ---------------" << eom; + debug() << tmp_assign.pretty() << eom << " <-- " << malloc_expr.pretty() << eom; + + i_it->make_assignment(); i_it->code=assign1; i_it->source_location = location; i_it=goto_program.insert_after(i_it); - i_it->make_assignment(); + + /*i_it->make_assignment(); i_it->code=assign2; i_it->source_location = location; + i_it=goto_program.insert_after(i_it);*/ + + i_it->make_assignment(); + i_it->code=assign3aux; + i_it->source_location = location; i_it=goto_program.insert_after(i_it); + i_it->make_assignment(); i_it->code=assign3; i_it->source_location = location; + i_it=goto_program.insert_after(i_it); + + i_it->make_assignment(); + i_it->code=assign4; + i_it->source_location = location; } @@ -235,6 +306,8 @@ void pass_preprocesst::replace_string_calls std::map string_builders; Forall_goto_program_instructions(i_it, goto_program) { + debug() << "instruction: " << i_it->code.pretty() << eom; + if(i_it->is_function_call()) { code_function_callt &function_call=to_code_function_call(i_it->code); From 777be9eee35cefc06442daeea82bbfabb14903f1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 25 Oct 2016 09:31:25 +0100 Subject: [PATCH 164/221] pass preprocessing for toCharArray function, corrected type problems for geting data into a char array --- src/goto-programs/pass_preprocess.cpp | 248 +++++++++--------- src/goto-programs/pass_preprocess.h | 2 +- src/solvers/flattening/boolbv_with.cpp | 3 + .../string_constraint_generator.cpp | 17 +- .../refinement/string_constraint_generator.h | 8 +- src/solvers/refinement/string_functions.h | 1 + 6 files changed, 142 insertions(+), 137 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 1217c2cd274..f4a97690fc0 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -50,53 +50,39 @@ void pass_preprocesst::make_string_function i_it->code=assignment; } -void pass_preprocesst::make_array_function -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name) +void pass_preprocesst::make_to_char_array_function +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { - // replace "lhs=s.toCharArray()" with: - // tmp_assign = MALLOC(struct java::array[char],s->length) - // *tmp_assign = "function_name"() - // return_tmp1 = tmp_assign + // replace "return_tmp0 = s.toCharArray()" with: + // tmp_assign = MALLOC(struct java::array[reference],sizeof(s)) + // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); + // tmp_assign->data = __CPROVER_uninterpreted_string_data_func(s); + // return_tmp0 = tmp_assign code_function_callt &function_call=to_code_function_call(i_it->code); - debug() << "function_call = " << function_call.pretty() << eom; + + debug() << "==== CALL === " << function_call.pretty() << eom; + debug() << "==== RETURN TYPE === " << function_call.lhs().type().pretty() << eom; if(function_call.lhs().type().id()!=ID_pointer) debug() << "the function call should return a pointer" << eom; - // we produce a malloc side-effect, which stays typet object_type = function_call.lhs().type().subtype(); exprt object_size = size_of_expr(object_type, ns); if(object_size.is_nil()) debug() << "do_java_new got nil object_size" << eom; - debug() << "adding the name " << function_name << " to the symbols" << eom; - goto_functions.function_map[irep_idt(function_name)]; - auxiliary_symbolt tmp_symbol; - tmp_symbol.base_name=function_name; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=function_name; - tmp_symbol.type=pointer_typet(object_type); - symbol_table.add(tmp_symbol); + auto location = function_call.source_location(); + std::vector new_code; + side_effect_exprt malloc_expr(ID_malloc); malloc_expr.copy_to_operands(object_size); malloc_expr.type()=pointer_typet(object_type); - malloc_expr.add_source_location()=function_call.source_location(); - - side_effect_exprt malloc_expr_data(ID_malloc); - exprt array_size = constant_exprt(integer2binary(12,32),signedbv_typet(32)); - exprt char_size = constant_exprt(integer2binary(32,32),signedbv_typet(32)); - // this may not be correct - malloc_expr_data.copy_to_operands(mult_exprt(array_size,char_size)); - malloc_expr_data.type()=pointer_typet(object_type.subtype()); - malloc_expr_data.add_source_location()=function_call.source_location(); - + malloc_expr.add_source_location()=location; assert(function_call.arguments().size() >= 1); - exprt string_argument = function_call.arguments()[0]; + exprt string_argument = replace_string_literals(function_call.arguments()[0]); typet string_argument_type = string_argument.type(); auxiliary_symbolt tmp_assign_symbol; @@ -115,80 +101,88 @@ void pass_preprocesst::make_array_function tmp_string_symbol.type=string_argument_type.subtype(); symbol_table.add(tmp_string_symbol); - auxiliary_symbolt tmp_data_symbol; - tmp_data_symbol.base_name="tmp_data"; - tmp_data_symbol.is_static_lifetime=false; - tmp_data_symbol.mode=ID_java; - tmp_data_symbol.name="tmp_data"; - tmp_data_symbol.type=string_argument_type.subtype(); - symbol_table.add(tmp_data_symbol); - + // tmp_assign = MALLOC(struct java::array[reference],sizeof(s)) symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); - code_assignt assign1(tmp_assign, malloc_expr); - code_assignt assign2(member_exprt(dereference_exprt(tmp_assign,object_type),"data"), malloc_expr_data); - symbol_exprt tmp_string("tmp_string",string_argument_type.subtype()); - code_assignt assign3aux(tmp_string, dereference_exprt(function_call.arguments()[0])); - symbol_exprt tmp_data("tmp_data",string_argument_type.subtype()); + code_assignt assign_malloc(tmp_assign, malloc_expr); + new_code.push_back(assign_malloc); - // geting the length + // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); auxiliary_symbolt tmp_length_symbol; - //tmp_symbol.base_name=base_name; + tmp_length_symbol.base_name=cprover_string_length_func; tmp_length_symbol.is_static_lifetime=false; tmp_length_symbol.mode=ID_java; tmp_length_symbol.name=cprover_string_length_func; - // tmp_symbol.type=type; tmp_length_symbol.type=unsignedbv_typet(32); symbol_table.add(tmp_length_symbol); - // make sure it is in the function map goto_functions.function_map[cprover_string_length_func]; - - function_application_exprt rhs; - rhs.type()=unsignedbv_typet(32); - rhs.add_source_location()=function_call.source_location(); - rhs.function()=symbol_exprt(cprover_string_length_func); - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[0])); - - - //code_assignt assign3aux2(tmp_data, ; - code_assignt assign3(member_exprt - (dereference_exprt - (tmp_assign,object_type) - ,"length",signedbv_typet(32)), - //constant_exprt(integer2binary(12,32),signedbv_typet(32))); - typecast_exprt(rhs,signedbv_typet(32))); - //member_exprt(tmp_string,"length",signedbv_typet(32))); - //function_app); - code_assignt assign4(function_call.lhs(), tmp_assign); - auto location = function_call.source_location(); - - debug() << " ------------ ASSIGN1 ---------------" << eom; - debug() << tmp_assign.pretty() << eom << " <-- " << malloc_expr.pretty() << eom; + function_application_exprt call_to_length; + call_to_length.type()=unsignedbv_typet(32); + call_to_length.add_source_location()=location; + call_to_length.function()=symbol_exprt(cprover_string_length_func); + call_to_length.arguments().push_back(string_argument); - i_it->make_assignment(); - i_it->code=assign1; - i_it->source_location = location; - i_it=goto_program.insert_after(i_it); - - /*i_it->make_assignment(); - i_it->code=assign2; - i_it->source_location = location; - i_it=goto_program.insert_after(i_it);*/ - - i_it->make_assignment(); - i_it->code=assign3aux; - i_it->source_location = location; - i_it=goto_program.insert_after(i_it); - - i_it->make_assignment(); - i_it->code=assign3; - i_it->source_location = location; - i_it=goto_program.insert_after(i_it); + code_assignt assign_length(member_exprt(dereference_exprt(tmp_assign,object_type) + ,"length",signedbv_typet(32)), + typecast_exprt(call_to_length,signedbv_typet(32))); + new_code.push_back(assign_length); - i_it->make_assignment(); - i_it->code=assign4; - i_it->source_location = location; - + // tmp_assign->data = MALLOC(length) + side_effect_exprt malloc_expr_data(ID_malloc); + pointer_typet tmp_void_star = pointer_typet(void_typet()); + tmp_void_star.set(ID_C_reference,true); + typet void_star_star=pointer_typet(); + void_star_star.move_to_subtypes(tmp_void_star); + + malloc_expr_data.type()=pointer_typet(void_star_star); + debug() << "malloc_expr_data.type():" << malloc_expr_data.type().pretty() << eom; + //pointer_typet(pointer_typet(refined_string_typet::java_char_type(),32),32); + //exprt char_size = //size_of_expr(malloc_expr_data.type().subtype(), ns); + exprt array_size = member_exprt(dereference_exprt(tmp_assign,object_type) + ,"length",signedbv_typet(32)); + malloc_expr_data.copy_to_operands(array_size); + malloc_expr_data.add_source_location()=location; + + exprt data_pointer = member_exprt(dereference_exprt(tmp_assign,object_type),"data", void_star_star); + + new_code.push_back(code_assignt(data_pointer, malloc_expr_data)); + + debug() << "-- assigning " << malloc_expr_data.pretty() << eom + << "--------- to " << data_pointer.pretty() << eom; + + // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); + auxiliary_symbolt tmp_data_symbol; + tmp_data_symbol.base_name=cprover_string_data_func; + tmp_data_symbol.is_static_lifetime=false; + tmp_data_symbol.mode=ID_java; + tmp_data_symbol.name=cprover_string_data_func; + tmp_data_symbol.type=//pointer_typet( + pointer_typet(void_typet()); +//pointer_typet(refined_string_typet(refined_string_typet::java_char_type()).get_content_type()); + symbol_table.add(tmp_data_symbol); + goto_functions.function_map[cprover_string_data_func]; + + function_application_exprt call_to_data; + call_to_data.type()=void_star_star; + call_to_data.add_source_location()=location; + call_to_data.function()=symbol_exprt(cprover_string_data_func); + call_to_data.arguments().push_back(string_argument); + call_to_data.arguments().push_back(data_pointer); + new_code.push_back(code_assignt(data_pointer,call_to_data)); + + // return_tmp0 = tmp_assign + new_code.push_back(code_assignt(function_call.lhs(), tmp_assign)); + + + // putting the assignements into the program + for(int i=0; imake_assignment(); + i_it->code=new_code[i]; + i_it->source_location=location; + if(i string_builders; - Forall_goto_program_instructions(i_it, goto_program) { - debug() << "instruction: " << i_it->code.pretty() << eom; - - if(i_it->is_function_call()) { - - code_function_callt &function_call=to_code_function_call(i_it->code); - for(unsigned i = 0; i < function_call.arguments().size(); i++) - if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) - function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; - - if(function_call.function().id()==ID_symbol){ - const irep_idt function_id= - to_symbol_expr(function_call.function()).get_identifier(); + Forall_goto_program_instructions(i_it, goto_program) + { + if(i_it->is_function_call()) + { - if(string_functions.find(function_id) != string_functions.end()) - make_string_function(i_it,string_functions[function_id]); - else if(side_effect_functions.find(function_id) != side_effect_functions.end()) - make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); - else if(string_function_calls.find(function_id) != string_function_calls.end()) - make_string_function_call(i_it, string_function_calls[function_id]); - - else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) - make_array_function(goto_program,i_it,cprover_string_to_char_array_func); - - } - - } else { - if(i_it->is_assign()) { - code_assignt assignment = to_code_assign(i_it->code); - exprt new_rhs = replace_string_literals(assignment.rhs()); - code_assignt new_assignment(assignment.lhs(),new_rhs); - new_assignment.add_source_location()=assignment.source_location(); - i_it->make_assignment(); - i_it->code=new_assignment; - } + code_function_callt &function_call=to_code_function_call(i_it->code); + for(unsigned i = 0; i < function_call.arguments().size(); i++) + if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) + function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; + + if(function_call.function().id()==ID_symbol) + { + const irep_idt function_id= + to_symbol_expr(function_call.function()).get_identifier(); + + if(string_functions.find(function_id) != string_functions.end()) + make_string_function(i_it,string_functions[function_id]); + else if(side_effect_functions.find(function_id) != side_effect_functions.end()) + make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); + else if(string_function_calls.find(function_id) != string_function_calls.end()) + make_string_function_call(i_it, string_function_calls[function_id]); + + else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) + make_to_char_array_function(goto_program,i_it); + } + } + else + { + if(i_it->is_assign()) + { + code_assignt assignment = to_code_assign(i_it->code); + exprt new_rhs = replace_string_literals(assignment.rhs()); + code_assignt new_assignment(assignment.lhs(),new_rhs); + new_assignment.add_source_location()=assignment.source_location(); + i_it->make_assignment(); + i_it->code=new_assignment; + } + } } - } return; } diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 21dc9a9613f..d246a753009 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -32,7 +32,7 @@ class pass_preprocesst:public messaget exprt replace_string_literals(const exprt & ); void make_string_function(goto_programt::instructionst::iterator &, irep_idt); - void make_array_function(goto_programt & goto_program, goto_programt::instructionst::iterator &, irep_idt); + void make_to_char_array_function(goto_programt & goto_program, goto_programt::instructionst::iterator &); void make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_string_function_call(goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_string_function_side_effect diff --git a/src/solvers/flattening/boolbv_with.cpp b/src/solvers/flattening/boolbv_with.cpp index d0c5ac524ed..ab97180718b 100644 --- a/src/solvers/flattening/boolbv_with.cpp +++ b/src/solvers/flattening/boolbv_with.cpp @@ -287,6 +287,9 @@ void boolbvt::convert_with_struct( if(!base_type_eq(subtype, op2.type(), ns)) { error().source_location=type.source_location(); + error() << "solvers/flattening/boolbv_with.cpp:" << eom; + error() << "expected gobal type = " << type.pretty() << eom; + error() << "op2 = " << op2.pretty() << eom; error() << "with/struct: component `" << component_name << "' type does not match: " << subtype.pretty() << " vs. " diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 6e555383502..a363188c475 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -249,7 +249,7 @@ exprt string_constraint_generatort::function_application else if(starts_with(id,cprover_string_insert_float_func)) return string_insert_float(expr); else if(starts_with(id,cprover_string_substring_func)) - return string_substring(expr); + return string_substring(expr); else if(starts_with(id,cprover_string_trim_func)) return string_trim(expr); else if(starts_with(id,cprover_string_to_lower_case_func)) @@ -257,7 +257,7 @@ exprt string_constraint_generatort::function_application else if(starts_with(id,cprover_string_to_upper_case_func)) return string_to_upper_case(expr); else if(starts_with(id,cprover_string_char_set_func)) - return string_char_set(expr); + return string_char_set(expr); else if(starts_with(id,cprover_string_value_of_func)) return string_value_of(expr); else if(starts_with(id,cprover_string_empty_string_func)) @@ -269,7 +269,7 @@ exprt string_constraint_generatort::function_application else if(starts_with(id,cprover_string_of_int_hex_func)) return of_int_hex(expr); else if(starts_with(id,cprover_string_of_float_func)) - return of_float(expr); + return of_float(expr); else if(starts_with(id,cprover_string_of_double_func)) return of_double(expr); else if(starts_with(id,cprover_string_of_long_func)) @@ -288,17 +288,17 @@ exprt string_constraint_generatort::function_application return string_replace(expr); else if(starts_with(id,cprover_string_format_func)) return string_format(expr); + else if(starts_with(id,cprover_string_data_func)) + return string_data(expr); else { std::string msg("string_exprt::function_application: unknown symbol :"); msg+=id.c_str(); throw msg; } - } - irep_idt extract_java_string(const symbol_exprt & s) { std::string tmp(s.get(ID_identifier).c_str()); @@ -1196,6 +1196,13 @@ exprt string_constraint_generatort::string_length return str.length(); } +exprt string_constraint_generatort::string_data +(const function_application_exprt &f) +{ + string_exprt str = string_of_expr(args(f,2)[0]); + return address_of_exprt(str.content()); +} + exprt is_positive(const exprt & x) { return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index f65f3890e96..605aeab7300 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -46,12 +46,9 @@ class string_constraint_generatort { symbol_exprt fresh_univ_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); - - std::map symbol_to_string; - inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr){ - symbol_to_string[sym.get_identifier()]= expr; - } + inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr) + { symbol_to_string[sym.get_identifier()]= expr; } // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string string_exprt get_string_of_symbol(const symbol_exprt & sym); @@ -87,6 +84,7 @@ class string_constraint_generatort { exprt string_contains(const function_application_exprt &f); exprt string_equal(const function_application_exprt &f); exprt string_equals_ignore_case(const function_application_exprt &f); + exprt string_data(const function_application_exprt &f); string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); string_exprt string_delete(const function_application_exprt &expr); string_exprt string_delete_char_at(const function_application_exprt &expr); diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index f07294ac0a4..311daa15925 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -55,6 +55,7 @@ const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_string_is_ const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_string_is_empty_func"); const irep_idt cprover_string_last_index_of_func("__CPROVER_uninterpreted_string_last_index_of_func"); const irep_idt cprover_string_length_func("__CPROVER_uninterpreted_string_length_func"); +const irep_idt cprover_string_data_func("__CPROVER_uninterpreted_string_data_func"); const irep_idt cprover_string_of_int_func("__CPROVER_uninterpreted_string_of_int_func"); const irep_idt cprover_string_of_int_hex_func("__CPROVER_uninterpreted_string_of_int_hex_func"); const irep_idt cprover_string_of_long_func("__CPROVER_uninterpreted_string_of_long_func"); From 497e41db151a1ed6478c198b1b9a5d351bb5ef25 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 25 Oct 2016 09:45:34 +0100 Subject: [PATCH 165/221] corrected a mistake in the pass preprocessing, which was puting arguments in the wrong places for some functions --- src/goto-programs/pass_preprocess.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index f4a97690fc0..b62924c151f 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -218,6 +218,8 @@ void pass_preprocesst::make_string_function_call code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); + debug() << "make_string_function_call of : " << function_call.pretty() << eom; + auxiliary_symbolt tmp_symbol; tmp_symbol.is_static_lifetime=false; tmp_symbol.mode=ID_java; @@ -412,6 +414,19 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_functions[irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")] = cprover_string_format_func; string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = cprover_string_copy_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = cprover_string_of_float_func; + string_functions[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = cprover_string_of_float_func; + string_functions[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = cprover_string_of_int_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = cprover_string_of_int_func; + string_functions[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = cprover_string_of_int_hex_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = cprover_string_of_long_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = cprover_string_of_double_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; + string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; + string_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; + string_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_int_func; @@ -435,18 +450,6 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; - string_function_calls[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = cprover_string_of_int_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = cprover_string_of_int_func; - string_function_calls[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = cprover_string_of_int_hex_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = cprover_string_of_long_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = cprover_string_of_float_func; - string_function_calls[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = cprover_string_of_float_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = cprover_string_of_double_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; - string_function_calls[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; - string_function_calls[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; Forall_goto_functions(it, goto_functions) { From b6d775008f7ba7fb032bc5efb794baf229384921 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 25 Oct 2016 17:34:26 +0100 Subject: [PATCH 166/221] corrected the type problems for data access in toCharArray --- src/goto-programs/pass_preprocess.cpp | 94 +++++++++++-------- .../string_constraint_generator.cpp | 33 ++++++- .../refinement/string_constraint_generator.h | 4 + src/solvers/refinement/string_refinement.cpp | 25 ++++- src/solvers/refinement/string_refinement.h | 7 +- 5 files changed, 110 insertions(+), 53 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b62924c151f..25c457b299c 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -54,15 +54,13 @@ void pass_preprocesst::make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { // replace "return_tmp0 = s.toCharArray()" with: - // tmp_assign = MALLOC(struct java::array[reference],sizeof(s)) + // tmp_assign = MALLOC(struct java::array[reference], 17L); // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - // tmp_assign->data = __CPROVER_uninterpreted_string_data_func(s); - // return_tmp0 = tmp_assign + // tmp_assign->data = MALLOC(void **, tmp_assign->length); + // tmp_nil = __CPROVER_uninterpreted_string_data_func(s, tmp_assign->data); + // return_tmp0 = tmp_assign; code_function_callt &function_call=to_code_function_call(i_it->code); - - debug() << "==== CALL === " << function_call.pretty() << eom; - debug() << "==== RETURN TYPE === " << function_call.lhs().type().pretty() << eom; if(function_call.lhs().type().id()!=ID_pointer) debug() << "the function call should return a pointer" << eom; @@ -135,20 +133,23 @@ void pass_preprocesst::make_to_char_array_function void_star_star.move_to_subtypes(tmp_void_star); malloc_expr_data.type()=pointer_typet(void_star_star); - debug() << "malloc_expr_data.type():" << malloc_expr_data.type().pretty() << eom; - //pointer_typet(pointer_typet(refined_string_typet::java_char_type(),32),32); - //exprt char_size = //size_of_expr(malloc_expr_data.type().subtype(), ns); exprt array_size = member_exprt(dereference_exprt(tmp_assign,object_type) ,"length",signedbv_typet(32)); malloc_expr_data.copy_to_operands(array_size); malloc_expr_data.add_source_location()=location; - exprt data_pointer = member_exprt(dereference_exprt(tmp_assign,object_type),"data", void_star_star); - - new_code.push_back(code_assignt(data_pointer, malloc_expr_data)); + auxiliary_symbolt tmp_malloc_symbol; + tmp_malloc_symbol.base_name="tmp_malloc"; + tmp_malloc_symbol.is_static_lifetime=false; + tmp_malloc_symbol.mode=ID_java; + tmp_malloc_symbol.name="tmp_malloc"; + tmp_malloc_symbol.type=void_star_star; + symbol_table.add(tmp_malloc_symbol); - debug() << "-- assigning " << malloc_expr_data.pretty() << eom - << "--------- to " << data_pointer.pretty() << eom; + symbol_exprt tmp_malloc("tmp_malloc",void_star_star); + exprt data_pointer = member_exprt(dereference_exprt(tmp_assign,object_type),"data", void_star_star); + new_code.push_back(code_assignt(tmp_malloc, malloc_expr_data)); + new_code.push_back(code_assignt(data_pointer, tmp_malloc)); // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); auxiliary_symbolt tmp_data_symbol; @@ -156,32 +157,43 @@ void pass_preprocesst::make_to_char_array_function tmp_data_symbol.is_static_lifetime=false; tmp_data_symbol.mode=ID_java; tmp_data_symbol.name=cprover_string_data_func; - tmp_data_symbol.type=//pointer_typet( - pointer_typet(void_typet()); -//pointer_typet(refined_string_typet(refined_string_typet::java_char_type()).get_content_type()); + tmp_data_symbol.type=void_typet(); symbol_table.add(tmp_data_symbol); goto_functions.function_map[cprover_string_data_func]; function_application_exprt call_to_data; - call_to_data.type()=void_star_star; + call_to_data.type()=void_typet(); call_to_data.add_source_location()=location; call_to_data.function()=symbol_exprt(cprover_string_data_func); call_to_data.arguments().push_back(string_argument); - call_to_data.arguments().push_back(data_pointer); - new_code.push_back(code_assignt(data_pointer,call_to_data)); + call_to_data.arguments().push_back(data_pointer);//dereference_exprt(tmp_assign,object_type)); + call_to_data.arguments().push_back(dereference_exprt(tmp_malloc)); + + auxiliary_symbolt tmp_nil_symbol; + tmp_nil_symbol.base_name="tmp_nil"; + tmp_nil_symbol.is_static_lifetime=false; + tmp_nil_symbol.mode=ID_java; + tmp_nil_symbol.name="tmp_nil"; + tmp_nil_symbol.type=void_typet(); + symbol_table.add(tmp_nil_symbol); + + new_code.push_back(code_assignt(symbol_exprt("tmp_nil",void_typet()),call_to_data)); + // return_tmp0 = tmp_assign new_code.push_back(code_assignt(function_call.lhs(), tmp_assign)); - + // putting the assignements into the program for(int i=0; imake_assignment(); i_it->code=new_code[i]; i_it->source_location=location; if(i #include #include - +#include constant_exprt string_constraint_generatort::constant_char(int i) { @@ -448,8 +448,8 @@ string_exprt string_constraint_generatort::java_char_array(const exprt & char_ar { string_exprt res(get_char_type()); exprt arr = to_address_of_expr(char_array).object(); - exprt len = member_exprt(arr, "length",res.length().type()); - exprt cont = member_exprt(arr, "data",res.content().type()); + exprt len = member_exprt(arr, "length", res.length().type()); + exprt cont = member_exprt(arr, "data", res.content().type()); res.op0() = len; res.op1() = cont; return res; @@ -1199,8 +1199,31 @@ exprt string_constraint_generatort::string_length exprt string_constraint_generatort::string_data (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,2)[0]); - return address_of_exprt(str.content()); + string_exprt str = string_of_expr(args(f,3)[0]); + exprt tab_data = args(f,3)[1]; + exprt data = args(f,3)[2]; + //axioms.push_back(equal_exprt(str.content(),data)); + //member_substitutions[data]=str; + symbol_exprt qvar = fresh_univ_index("QA_string_data"); + // translating data[qvar] to the correct expression + // which is (signed int)byte_extract_little_endian(tab?data?, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian(tab.data, 0l, unsigned short int *)), unsigned short int) + exprt char_in_tab = typecast_exprt + (byte_extract_exprt(ID_byte_extract_little_endian,data, + plus_exprt + (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), + pointer_offset(byte_extract_exprt + (ID_byte_extract_little_endian, + tab_data + ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), + get_char_type()); + + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); + //string_constraintt eq(equal_exprt(constant_char('b'),char_in_tab)); + axioms.push_back(eq.forall(qvar,str.length())); + + exprt void_expr; + void_expr.type() = void_typet(); + return void_expr; } exprt is_positive(const exprt & x) diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 605aeab7300..e879e1c92a2 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -50,6 +50,10 @@ class string_constraint_generatort { inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr) { symbol_to_string[sym.get_identifier()]= expr; } + + // member expressions that needs to be converted to something else during conversion + std::map member_substitutions; + // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string string_exprt get_string_of_symbol(const symbol_exprt & sym); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 64aff4262a5..d87266b0cb9 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -89,10 +89,11 @@ literalt string_refinementt::convert_rest(const exprt &expr) assert(bv.size() == 1); return bv[0]; } - else { - //debug() << "string_refinementt::convert_rest("<< pretty_short(expr) << ")" << eom; - return SUB::convert_rest(expr); - } + else + { + //debug() << "string_refinementt::convert_rest("<< pretty_short(expr) << ")" << eom; + return SUB::convert_rest(expr); + } } bvt string_refinementt::convert_pointer_type(const exprt &expr) @@ -132,6 +133,22 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) //} } + +bvt string_refinementt::convert_member(const member_exprt &expr) +{ + //debug() << "string_refinementt::convert_member( " << expr.pretty() << ");" << eom; + // DOES NOT SEEM TO BE USEFULL + std::map::iterator it = generator.member_substitutions.find(expr); + if(it!=generator.member_substitutions.end()) + { + debug() << "substituting : " << expr.pretty() << eom << "for : " + << it->second.pretty() << eom; + return SUB::convert_bv(it->second); + } + else + return SUB::convert_member(expr); +} + bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 6bc0677b808..59db2d675e6 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -45,13 +45,13 @@ class string_refinementt: public bv_refinementt protected: typedef std::set expr_sett; - typedef std::map expr_mapt; virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); virtual bvt convert_function_application( const function_application_exprt &expr); virtual bvt convert_pointer_type(const exprt &expr); + virtual bvt convert_member(const member_exprt &expr); decision_proceduret::resultt dec_solve(); @@ -59,15 +59,14 @@ class string_refinementt: public bv_refinementt bvt convert_bool_bv(const exprt &boole, const exprt &orig); - private: + + string_constraint_generatort generator; // Tells if a char value is in the high-surrogates or low surrogates ranges exprt is_high_surrogate(const exprt & chr); exprt is_low_surrogate(const exprt & chr); - string_constraint_generatort generator; - // Simple constraints that have been given to the solver expr_sett seen_instances; // From fd6ecb60930de50e1a42f283a66f6baa8070b156 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 25 Oct 2016 17:37:22 +0100 Subject: [PATCH 167/221] regression test for toCharArray --- regression/strings/java_char_array/test.desc | 8 ++++++++ .../java_char_array/test_char_array.class | Bin 0 -> 771 bytes .../strings/java_char_array/test_char_array.java | 15 +++++++++++++++ 3 files changed, 23 insertions(+) create mode 100644 regression/strings/java_char_array/test.desc create mode 100644 regression/strings/java_char_array/test_char_array.class create mode 100644 regression/strings/java_char_array/test_char_array.java diff --git a/regression/strings/java_char_array/test.desc b/regression/strings/java_char_array/test.desc new file mode 100644 index 00000000000..89d60f8f33d --- /dev/null +++ b/regression/strings/java_char_array/test.desc @@ -0,0 +1,8 @@ +CORE +test_char_array.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_char_array.java line 12: SUCCESS$ +^\[assertion.2\] assertion at file test_char_array.java line 13: FAILURE$ +-- \ No newline at end of file diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class new file mode 100644 index 0000000000000000000000000000000000000000..2ae67d69fcee2d97152bd650b2420ece923d0b54 GIT binary patch literal 771 zcmZuuTWb?R6#iy!lWaCknlv@3#@bqSlU@Se9<&rgR1i`tL^@d#g{o}&YW|;%Y6Uw`73~HXxXqam%&*Z=TKM2`7AP+=eS_Q z!W_qfjYVAKSYjwIi74`A9E`%~ZV-w7&>t|cZ3b&S2!nWoL3bNZ7>v$n;4>7uLFhjm zAM}0sST)nbfe1o|S$C(qFJ6k)P=tG}UMz!f@3tDu_hR8a-xM#BevV5VmpQI5WY)dm z9|*fQ8cWZ=AE<>hu^+{|-ZLS0g_Ppenp*21k166J`X0?YaM5tk#Il1N9ENHN-9FKC zPs))b#{aD2SaGn5HHKn3wAJ7Dy_oFykBGk-e+y&Kb~+5Xc+?@9ZN-v|a2u*4BWy#sdA7O&`gMRi%wG9poaW=q%8!PLWYG zo5x@uR3nOXT1k;1i)oZ7SFLZMQ5|?x(z?qN=$k9%^^K-}^_EdH^a+fc=0})^n64MS zBjmoodU_20Eve1dE9Mbu6|*SbphV&IyR<{0Y6(AZieu4s8O~`q_>E6 znL4V_ep12WnBk~!%rXk3LWw5;ww literal 0 HcmV?d00001 diff --git a/regression/strings/java_char_array/test_char_array.java b/regression/strings/java_char_array/test_char_array.java new file mode 100644 index 00000000000..8c50b0a6c10 --- /dev/null +++ b/regression/strings/java_char_array/test_char_array.java @@ -0,0 +1,15 @@ +public class test_char_array { + + public static void main(String[] argv) { + String s = "abc"; + //char[] str = new char[12]; + char [] str = s.toCharArray(); + char c = str[2]; + String t = argv[0]; + //str[3]='0'; + //assert(str.length == 3); + char d = t.charAt(0); + assert(c == 'c'); + assert(c == d || d < 'a' || d > 'z' ); + } +} From dca43ef2e5324c22e6439a410cf1f198e4345cba Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 25 Oct 2016 17:39:47 +0100 Subject: [PATCH 168/221] regression test for toCharArray --- regression/strings/java_char_array/test.desc | 5 +++-- .../java_char_array/test_char_array.class | Bin 771 -> 796 bytes .../java_char_array/test_char_array.java | 6 +++--- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/regression/strings/java_char_array/test.desc b/regression/strings/java_char_array/test.desc index 89d60f8f33d..59c8a082b1b 100644 --- a/regression/strings/java_char_array/test.desc +++ b/regression/strings/java_char_array/test.desc @@ -3,6 +3,7 @@ test_char_array.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_char_array.java line 12: SUCCESS$ -^\[assertion.2\] assertion at file test_char_array.java line 13: FAILURE$ +^\[assertion.1\] assertion at file test_char_array.java line 11: SUCCESS$ +^\[assertion.2\] assertion at file test_char_array.java line 12: SUCCESS$ +^\[assertion.3\] assertion at file test_char_array.java line 13: FAILURE$ -- \ No newline at end of file diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index 2ae67d69fcee2d97152bd650b2420ece923d0b54..5e35a5466c278bcf21fbb817cefebb6dde45f1bb 100644 GIT binary patch delta 98 zcmZo>o5Qw2n2B>Y0}}%q0|P_KWEm!TKAnAR^BK5zGq6Q&XJFqy*_6paUyXqiD9ysa x%)rXP0aVJvz|J5DWJxk`Gw1?&jtsmE$qal9!a!A$49t@kFo`k>Pu|Mp2LKru4j%vj delta 94 zcmbQk*37m+n2B={0}}%q0|P_AWEm#;$^J}M4oVChKt2ltGf 'z' ); } From e2904bacc27979cbcebd2bb1066dff3c9bd2d30e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 26 Oct 2016 14:47:04 +0100 Subject: [PATCH 169/221] corrected a problem with StringBuilder in goto programs --- .../java_char_array/test_char_array.class | Bin 796 -> 1116 bytes .../java_char_array/test_char_array.java | 24 ++++++- src/goto-programs/pass_preprocess.cpp | 11 +-- .../string_constraint_generator.cpp | 36 ++++++++-- .../refinement/string_constraint_generator.h | 4 +- src/solvers/refinement/string_functions.h | 1 + src/solvers/refinement/string_refinement.cpp | 67 ++++++++++-------- src/solvers/refinement/string_refinement.h | 6 +- 8 files changed, 103 insertions(+), 46 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index 5e35a5466c278bcf21fbb817cefebb6dde45f1bb..bf14f1ea5a1351486782ad9434e9acbbc76e8b69 100644 GIT binary patch literal 1116 zcmZuw+fEZv6kVrtYo~)9T3U;8E26XoLFMA5q>)q&#-a~c5+F*Z?F0vhj!vg0`X};2 zj3&OBs7Wzm@ZEp%vd(6YMA$1J5|$t$iWN|&un^|9LvzN;u*E4%f>VROu;3hMp+->Ih%&- z8ZQ}=+48pW!kD&=#@6(T=UR=eg5P4tuo?`h?8g7k!wWV0h?BbFwA`9`$Knk7{Q9*g zhTG{d#j9(GBf+3|cjEcW8g%qBNK2+|I~uNFh9Mmw7mp>m?YfRj3K-RzhFQ#Mn8#HO zDPB3&)m6bY4cBqwpPmn@+h&b~32l_9U3R0y=akLoEyHeh3DJQTawL7!b4oPLVn;49 zo8xcGe85GjC1&sDD2@euOE#HE!qv^D<(l;q`s9Y!q62bp9U1aIMz@CPX+AyeBrq-# zt$h>?(v$IQejn^32O>$U>?g@)J~iz*^c@7cO~9(Iev|Iy1%0WK7j?6emvp<5m-(XT zPUQfhH7X{QKSA6@-$Yz$L*7O70Lt1v!r%W+zYfy8cgXLZhe~^iJ~HhTq93OI5%g0u zgebj`<^mz3)cq?E&N=!j|3B)%{v-o$0c#jjO09$aHsui)CwOwYKx3QvVGq_#T@nRwVCnr+3BjHuNWXe#Dy znx)q^>XhduTRHHuD3HE)&XgRANAy5WZ()J{%BGKG`LfbRHx1+>rs&L3R;9=& z8jT~cFRBoEI?V)RNMjlWx~tM-qzDJRLaMtwhPK%>?yfhq+Yj`Lu8pDJH@?C+z;yG( zJVfRg=Bp#{AE#I~?_R{_t0m(Qm6DMcA5oz2;nSo`F-av%mWTtO6K#W}m?VJ{Ckqvl zvqD*$#JD7!sW;jY5vy1|%D=HT*ool|Ahyw~mSYxCQ!1d42wQn#cYtIZ& PV-2LTkCaX2gjMAaGWM79 diff --git a/regression/strings/java_char_array/test_char_array.java b/regression/strings/java_char_array/test_char_array.java index 210b915599b..201e2d689aa 100644 --- a/regression/strings/java_char_array/test_char_array.java +++ b/regression/strings/java_char_array/test_char_array.java @@ -1,10 +1,24 @@ public class test_char_array { - public static void main(String[] argv) { + public static void test_init() + { + char [] str = new char[10]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + String s = new String(str); + assert(s.equals("Hello")); + assert(!s.equals("Hello")); + } + + + public static void test_to_array(String t) + { String s = "abc"; char [] str = s.toCharArray(); char c = str[2]; - String t = argv[0]; char d = t.charAt(0); @@ -12,4 +26,10 @@ public static void main(String[] argv) { assert(c == 'c'); assert(c == d || d < 'a' || d > 'z' ); } + + public static void main(String[] argv) + { + test_init(); + // test_to_array(argv[0]); + } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 25c457b299c..6a097752caa 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -256,7 +256,7 @@ void pass_preprocesst::make_string_function_side_effect (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) { - // replace "s.append(x)" by "s=__CPROVER_uninterpreted_string_concat(s,x)" + // replace "r = s.append(x)" by "s=__CPROVER_uninterpreted_string_concat(s,x); r = s" code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); @@ -268,14 +268,16 @@ void pass_preprocesst::make_string_function_side_effect function_application_exprt rhs; typet return_type = function_call.arguments()[0].type(); - rhs.type()=return_type;//to_pointer_type(return_type).subtype(); + rhs.type()=return_type; rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); + for(unsigned i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); - //code_assignt assignment(dereference_exprt(function_call.arguments()[0]), rhs); + code_assignt assignment(function_call.arguments()[0], rhs); //code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); + // add a mapping from the left hand side to the first argument string_builders[function_call.lhs()]=function_call.arguments()[0]; assignment.add_source_location()=function_call.source_location(); @@ -310,8 +312,6 @@ void pass_preprocesst::replace_string_calls (goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; - // map several names of a string builder to a unique one - std::map string_builders; Forall_goto_program_instructions(i_it, goto_program) { @@ -464,6 +464,7 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; + string_function_calls[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; Forall_goto_functions(it, goto_functions) { diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 0c8db0c86d5..ddea5be54a8 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -278,6 +278,8 @@ exprt string_constraint_generatort::function_application return of_bool(expr); else if(starts_with(id,cprover_string_of_char_func)) return of_char(expr); + else if(starts_with(id,cprover_string_of_char_array_func)) + return of_char_array(expr); else if(starts_with(id,cprover_string_set_length_func)) return string_set_length(expr); else if(starts_with(id,cprover_string_delete_func)) @@ -1202,11 +1204,9 @@ exprt string_constraint_generatort::string_data string_exprt str = string_of_expr(args(f,3)[0]); exprt tab_data = args(f,3)[1]; exprt data = args(f,3)[2]; - //axioms.push_back(equal_exprt(str.content(),data)); - //member_substitutions[data]=str; symbol_exprt qvar = fresh_univ_index("QA_string_data"); // translating data[qvar] to the correct expression - // which is (signed int)byte_extract_little_endian(tab?data?, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian(tab.data, 0l, unsigned short int *)), unsigned short int) + // which is (signed int)byte_extract_little_endian(data, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian(tab.data, 0l, unsigned short int *)), unsigned short int) exprt char_in_tab = typecast_exprt (byte_extract_exprt(ID_byte_extract_little_endian,data, plus_exprt @@ -1218,7 +1218,6 @@ exprt string_constraint_generatort::string_data get_char_type()); string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - //string_constraintt eq(equal_exprt(constant_char('b'),char_in_tab)); axioms.push_back(eq.forall(qvar,str.length())); exprt void_expr; @@ -1226,6 +1225,35 @@ exprt string_constraint_generatort::string_data return void_expr; } + +string_exprt string_constraint_generatort::of_char_array +(const function_application_exprt &f) +{ + string_exprt str(get_char_type()); + exprt tab = string_of_expr(args(f,1)[0]); + exprt tab_data = member_exprt(tab,"data"); + exprt tab_length = member_exprt(tab,"length"); + exprt data = dereference_exprt(tab_data); + symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); + exprt char_in_tab = typecast_exprt + (byte_extract_exprt(ID_byte_extract_little_endian,data, + plus_exprt + (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), + pointer_offset(byte_extract_exprt + (ID_byte_extract_little_endian, + tab_data + ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), + get_char_type()); + + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); + axioms.push_back(eq.forall(qvar,str.length())); + axioms.emplace_back(equal_exprt(str.length(),tab_length)); + + return str; +} + + + exprt is_positive(const exprt & x) { return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index e879e1c92a2..7d2962b9f63 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -51,9 +51,6 @@ class string_constraint_generatort { { symbol_to_string[sym.get_identifier()]= expr; } - // member expressions that needs to be converted to something else during conversion - std::map member_substitutions; - // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string string_exprt get_string_of_symbol(const symbol_exprt & sym); @@ -127,6 +124,7 @@ class string_constraint_generatort { string_exprt of_bool(const exprt &i); string_exprt of_char(const function_application_exprt &f); string_exprt of_char(const exprt &i); + string_exprt of_char_array(const function_application_exprt &f); // Warning: the specifications of these functions is only partial: string_exprt of_float(const function_application_exprt &f); diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 311daa15925..231b9f41b13 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -63,6 +63,7 @@ const irep_idt cprover_string_of_bool_func("__CPROVER_uninterpreted_string_of_bo const irep_idt cprover_string_of_float_func("__CPROVER_uninterpreted_string_of_float_func"); const irep_idt cprover_string_of_double_func("__CPROVER_uninterpreted_string_of_double_func"); const irep_idt cprover_string_of_char_func("__CPROVER_uninterpreted_string_of_char_func"); +const irep_idt cprover_string_of_char_array_func("__CPROVER_uninterpreted_string_of_char_array_func"); const irep_idt cprover_string_parse_int_func("__CPROVER_uninterpreted_string_parse_int_func"); const irep_idt cprover_string_replace_func("__CPROVER_uninterpreted_string_replace_func"); const irep_idt cprover_string_set_length_func("__CPROVER_uninterpreted_string_set_length_func"); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index d87266b0cb9..ef3623f38aa 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -133,10 +133,12 @@ bvt string_refinementt::convert_pointer_type(const exprt &expr) //} } + /* bvt string_refinementt::convert_member(const member_exprt &expr) { //debug() << "string_refinementt::convert_member( " << expr.pretty() << ");" << eom; + // DOES NOT SEEM TO BE USEFULL std::map::iterator it = generator.member_substitutions.find(expr); if(it!=generator.member_substitutions.end()) @@ -145,9 +147,9 @@ bvt string_refinementt::convert_member(const member_exprt &expr) << it->second.pretty() << eom; return SUB::convert_bv(it->second); } - else + else return SUB::convert_member(expr); -} +}*/ bvt string_refinementt::convert_symbol(const exprt &expr) { @@ -708,7 +710,8 @@ class find_qvar_visitor: public const_expr_visitort { }; // Look for the given symbol in the index expression -bool find_qvar(const exprt index, const symbol_exprt & qvar) { +bool find_qvar(const exprt index, const symbol_exprt & qvar) +{ find_qvar_visitor v2(qvar); try { index.visit(v2); @@ -717,10 +720,11 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) { } -void string_refinementt::initial_index_set(const std::vector & string_axioms) { - for (size_t i = 0; i < string_axioms.size(); ++i) { +void string_refinementt::initial_index_set +(const std::vector & string_axioms) +{ + for (size_t i = 0; i < string_axioms.size(); ++i) initial_index_set(string_axioms[i]); - } } void string_refinementt::update_index_set(const std::vector & cur) { @@ -736,36 +740,41 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom) std::vector to_process; to_process.push_back(axiom.body()); - while (!to_process.empty()) { - exprt cur = to_process.back(); - to_process.pop_back(); - if (cur.id() == ID_index) { - const exprt &s = cur.op0(); - const exprt &i = cur.op1(); + while (!to_process.empty()) + { + exprt cur = to_process.back(); + to_process.pop_back(); + if (cur.id() == ID_index) + { + const exprt &s = cur.op0(); + const exprt &i = cur.op1(); - bool has_quant_var = find_qvar(i,qvar); + bool has_quant_var = find_qvar(i,qvar); - // if cur is of the form s[i] and no quantified variable appears in i - if(!has_quant_var){ - current_index_set[s].insert(i); - index_set[s].insert(i); - } else { - // otherwise we add k-1 - exprt e(i); - replace_expr(qvar,minus_exprt(axiom.univ_bound_sup(),refined_string_typet::index_of_int(1)),e); - current_index_set[s].insert(e); - index_set[s].insert(e); - } + // if cur is of the form s[i] and no quantified variable appears in i + if(!has_quant_var) + { + current_index_set[s].insert(i); + index_set[s].insert(i); + } + else + { + // otherwise we add k-1 + exprt e(i); + replace_expr(qvar,minus_exprt(axiom.univ_bound_sup(),refined_string_typet::index_of_int(1)),e); + current_index_set[s].insert(e); + index_set[s].insert(e); + } - } else { - forall_operands(it, cur) { - to_process.push_back(*it); - } + } + else + forall_operands(it, cur) + to_process.push_back(*it); } - } } + void string_refinementt::update_index_set(const exprt &formula) { std::vector to_process; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 59db2d675e6..3c997c1a607 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -48,10 +48,10 @@ class string_refinementt: public bv_refinementt virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); - virtual bvt convert_function_application( - const function_application_exprt &expr); + virtual bvt convert_function_application + (const function_application_exprt &expr); + virtual bvt convert_pointer_type(const exprt &expr); - virtual bvt convert_member(const member_exprt &expr); decision_proceduret::resultt dec_solve(); From 9fed105e652a9f12fbfdbe95c582b2f2dec85d40 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Wed, 26 Oct 2016 17:06:09 +0100 Subject: [PATCH 170/221] trying to add ofCharArray function --- .../java_char_array/test_char_array.class | Bin 1116 -> 831 bytes .../java_char_array/test_char_array.java | 5 ++- src/goto-programs/pass_preprocess.cpp | 40 +++++++++++++++--- src/goto-programs/pass_preprocess.h | 18 ++++++-- .../string_constraint_generator.cpp | 25 ++++++----- 5 files changed, 67 insertions(+), 21 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index bf14f1ea5a1351486782ad9434e9acbbc76e8b69..541951d4c858c734f48e3ce51458d3d2a7494c83 100644 GIT binary patch delta 451 zcmYL_!Ak-`6vn?9cO6~V+_cP0OS7`H6v}P|WdwDsPIa**#0*gwm!MPUj`4g`rRevX3_%5Qxf7`%_Fz_>u1#mQ{~iGf>&julvYLvYAdzX)WBlS2TL|Lk>7 l3q)fuUJ$y4(C(r6o}sB(KDcvI88VNogNL`&(~{o#)E|JhI|={* literal 1116 zcmZuw+fEZv6kVrtYo~)9T3U;8E26XoLFMA5q>)q&#-a~c5+F*Z?F0vhj!vg0`X};2 zj3&OBs7Wzm@ZEp%vd(6YMA$1J5|$t$iWN|&un^|9LvzN;u*E4%f>VROu;3hMp+->Ih%&- z8ZQ}=+48pW!kD&=#@6(T=UR=eg5P4tuo?`h?8g7k!wWV0h?BbFwA`9`$Knk7{Q9*g zhTG{d#j9(GBf+3|cjEcW8g%qBNK2+|I~uNFh9Mmw7mp>m?YfRj3K-RzhFQ#Mn8#HO zDPB3&)m6bY4cBqwpPmn@+h&b~32l_9U3R0y=akLoEyHeh3DJQTawL7!b4oPLVn;49 zo8xcGe85GjC1&sDD2@euOE#HE!qv^D<(l;q`s9Y!q62bp9U1aIMz@CPX+AyeBrq-# zt$h>?(v$IQejn^32O>$U>?g@)J~iz*^c@7cO~9(Iev|Iy1%0WK7j?6emvp<5m-(XT zPUQfhH7X{QKSA6@-$Yz$L*7O70Lt1v!r%W+zYfy8cgXLZhe~^iJ~HhTq93OI5%g0u zgebj`<^mz3)cq?E&N=!j|3B)%{v-o$0c#jjO0 'z' ); } - + */ public static void main(String[] argv) { test_init(); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 6a097752caa..65b053558e5 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -73,7 +73,6 @@ void pass_preprocesst::make_to_char_array_function auto location = function_call.source_location(); std::vector new_code; - side_effect_exprt malloc_expr(ID_malloc); malloc_expr.copy_to_operands(object_size); malloc_expr.type()=pointer_typet(object_type); @@ -166,7 +165,7 @@ void pass_preprocesst::make_to_char_array_function call_to_data.add_source_location()=location; call_to_data.function()=symbol_exprt(cprover_string_data_func); call_to_data.arguments().push_back(string_argument); - call_to_data.arguments().push_back(data_pointer);//dereference_exprt(tmp_assign,object_type)); + call_to_data.arguments().push_back(data_pointer); call_to_data.arguments().push_back(dereference_exprt(tmp_malloc)); auxiliary_symbolt tmp_nil_symbol; @@ -197,6 +196,37 @@ void pass_preprocesst::make_to_char_array_function } } + +void pass_preprocesst::make_of_char_array_function +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ + // replace "return_tmp0 = String.ofCharArray(arr)" with: + // return_tmp0 = __CPROVER_uninterpreted_string_of_char_array_func(arr.length,arr.data); + code_function_callt &function_call=to_code_function_call(i_it->code); + exprt lhs = function_call.arguments()[0]; + exprt arg = function_call.arguments()[1]; + auto location = function_call.source_location(); + typet object_type = arg.type().subtype(); + + pointer_typet tmp_void_star = pointer_typet(void_typet()); + tmp_void_star.set(ID_C_reference,true); + typet void_star_star=pointer_typet(); + void_star_star.move_to_subtypes(tmp_void_star); + + exprt array_size = member_exprt(dereference_exprt(arg,object_type) + ,"length",signedbv_typet(32)); + exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", + pointer_typet(pointer_typet(unsignedbv_typet(16)))); + exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); + + function_call.arguments().clear(); + function_call.arguments().push_back(lhs); + function_call.arguments().push_back(array_size); + function_call.arguments().push_back(data_pointer); + function_call.arguments().push_back(data); + make_string_function_call(i_it,function_name); +} + void pass_preprocesst::make_string_function_of_assign (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { @@ -230,8 +260,6 @@ void pass_preprocesst::make_string_function_call code_function_callt &function_call=to_code_function_call(i_it->code); code_typet old_type=to_code_type(function_call.function().type()); - debug() << "make_string_function_call of : " << function_call.pretty() << eom; - auxiliary_symbolt tmp_symbol; tmp_symbol.is_static_lifetime=false; tmp_symbol.mode=ID_java; @@ -337,6 +365,9 @@ void pass_preprocesst::replace_string_calls else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); + else if(function_id == irep_idt("java::java.lang.String.:([C)V")) + make_of_char_array_function(goto_program,i_it,cprover_string_of_char_array_func); + } } else @@ -464,7 +495,6 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; - string_function_calls[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; Forall_goto_functions(it, goto_functions) { diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index d246a753009..01ed1863630 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -32,14 +32,26 @@ class pass_preprocesst:public messaget exprt replace_string_literals(const exprt & ); void make_string_function(goto_programt::instructionst::iterator &, irep_idt); - void make_to_char_array_function(goto_programt & goto_program, goto_programt::instructionst::iterator &); - void make_string_function_of_assign(goto_programt::instructionst::iterator & i_it, irep_idt function_name); - void make_string_function_call(goto_programt::instructionst::iterator & i_it, irep_idt function_name); + + void make_to_char_array_function + (goto_programt & goto_program, goto_programt::instructionst::iterator &); + + void make_of_char_array_function + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt); + + void make_string_function_of_assign + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); + + void make_string_function_call + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); + void make_string_function_side_effect (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name); bool has_java_string_type(const exprt &expr); + void replace_string_calls(goto_functionst::function_mapt::iterator f_it); }; diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index ddea5be54a8..3a816117390 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1230,20 +1230,23 @@ string_exprt string_constraint_generatort::of_char_array (const function_application_exprt &f) { string_exprt str(get_char_type()); - exprt tab = string_of_expr(args(f,1)[0]); - exprt tab_data = member_exprt(tab,"data"); - exprt tab_length = member_exprt(tab,"length"); - exprt data = dereference_exprt(tab_data); + + exprt tab_length = args(f,3)[0]; + exprt tab_data = args(f,3)[1]; + exprt data = args(f,3)[2]; + symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); - exprt char_in_tab = typecast_exprt + exprt char_in_tab = + typecast_exprt (byte_extract_exprt(ID_byte_extract_little_endian,data, - plus_exprt - (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), - pointer_offset(byte_extract_exprt + //plus_exprt + (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64)))), + /*pointer_offset(byte_extract_exprt (ID_byte_extract_little_endian, - tab_data - ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), - get_char_type()); + data + ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)),*/ + get_char_type())); + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); axioms.push_back(eq.forall(qvar,str.length())); From 25351e7da5bc86ca1f5db507771eeddfd45a620f Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 10:16:49 +0100 Subject: [PATCH 171/221] changing from malloc to new[] for the char array of string --- .../java_char_array/test_char_array.class | Bin 831 -> 857 bytes .../java_char_array/test_char_array.java | 11 +-- src/cbmc/cbmc_parse_options.cpp | 9 ++- src/goto-programs/pass_preprocess.cpp | 69 +++++++++++++++--- src/goto-programs/pass_preprocess.h | 17 +++-- .../string_constraint_generator.cpp | 9 +-- 6 files changed, 86 insertions(+), 29 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index 541951d4c858c734f48e3ce51458d3d2a7494c83..ce4ba3646c1d31104ac8804f15fe6f542ef7eef3 100644 GIT binary patch literal 857 zcmZuvU279T6g{(_$!25Hq)AiTSldLqNn_*pOG`0C1tHakh+vDB$!4ir)2!@n1pO&} zDdK}~f(of9)OUZBdS_$1ScGNn$J}%8Id}HwuW!cyZs3}M6y_5s8@PZ4aa>FyiA5bt z1~kkY6jXFn4P3%y9m@>)Dh~q34_$8<+;s!q8#sLiw#A^WyF)kJV34ia69%R2^&N&x z#~nHkNBcd;e=Ld_(xDTCJE6D3eV@N!C|I36{+c%je7M`}hQ2%8T@ww`-H_WaH~Fgw zr^C`wqqh6p9WoTH?f;_^>-OL;52NdieA~J2imB7lRQm<@Cv#WDOcUpjA;P?8Q-2e6 zte9xviU|{GhEmL{bt3wn?|Z(99P*^?OivxFCYrd)kd2X#dV7u?{*#)BWRSMo45`p- z6RXx_8H!aCNlg%K5lXQh)F{rx{n`V109rub30&XlpAw^Og(JG4?Qda`-YrEh%(5jR zg**jJh@~@2QJE|wtJaUeK8Zq1(WymAMqtuMz9{_&2`bs=IjOTUhP>HOZ*J7(F_hcN zXQ&65Y8-2aNPUO)^a%QoNv@o=&*m1&1?3R41trVhAxGxz`xqrSND+r6B*-s7Mv=T3 zqF*8|b6Cba)`<8s`bnp$q6qmnB~=}T=qoZ3lo!Hh2r=Pap`JpfUYDfgc5Pj>fOIFrKN=?4kQQQ)PkS^REYqG5TqoB%1Ktm#kIk9koYO& z4{+iDNG+lW?)<2V+0ZtnT4}vA^Y+cWxBheV;}?M2sGG1b&#_=a!D1RFuBNaggJq6u zCOGCzO0ICMnz)V|9BT~uRX2`Blz3qfKk{O??~5S=>oOP{Uf?D78Psy+6@%6Yhk_y7 z^aAmGwAUBWO9^I3Cn8R^C6*!6O5DMlXYSicjiXG{(A7QH3mA&!UUS!d@78@c*r~UY z$P0GXC3R|J;2-xgTj3}gh$o(8E=-sQuia?djUx9$P2RSUh0S1}XOj7fg$yn*=v%_~ zLkkY745caZ;fd78Q4~fN@{%cgt_#Oa3%5}Fug8o2t{9L&rPm<(a<3uhHpIJ;>&FbU zQ5cj-fBCVE!vK5`)$XN8@I#uA(Rf0 zsZB?}bMGs(F$&e3z7J!JnM3f-0aCxuraw;8vcEFvU&9QYby@}q;52Xw1)64#qD88$ zk*F#O+9XLGsul>HfpUaRj#-W(D-!q;O2?xwQCX_gz9T&qDgR@TLn>B?e(qH0-3b=R i 'z' ); } - */ + public static void main(String[] argv) { - test_init(); - // test_to_array(argv[0]); + //test_init(); + test_to_array(argv[0]); } } diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 359e90010d9..7007b3abb1c 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -918,10 +918,11 @@ bool cbmc_parse_optionst::process_goto_program( goto_partial_inline(goto_functions, ns, ui_message_handler); - if(cmdline.isset("pass")) { - status() << "PASS Preprocessing " << eom; - pass_preprocesst(symbol_table, goto_functions,ns,ui_message_handler); - } + if(cmdline.isset("pass")) + { + status() << "PASS Preprocessing " << eom; + pass_preprocesst(symbol_table, goto_functions, ui_message_handler); + } // remove returns, gcc vectors, complex remove_returns(symbol_table, goto_functions); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 65b053558e5..cbd2d71c18a 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -17,6 +17,18 @@ Date: September 2016 #include #include +symbol_exprt pass_preprocesst::new_tmp_symbol +(const std::string &name, const typet &type) +{ + auxiliary_symbolt tmp_symbol; + tmp_symbol.base_name=name; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=name; + tmp_symbol.type=type; + symbol_table.add(tmp_symbol); + return symbol_exprt(name,type); +} void pass_preprocesst::make_string_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) @@ -124,7 +136,9 @@ void pass_preprocesst::make_to_char_array_function typecast_exprt(call_to_length,signedbv_typet(32))); new_code.push_back(assign_length); - // tmp_assign->data = MALLOC(length) + // tmp_malloc = MALLOC(length) + // tmp_assign->data = tmp_malloc + /* side_effect_exprt malloc_expr_data(ID_malloc); pointer_typet tmp_void_star = pointer_typet(void_typet()); tmp_void_star.set(ID_C_reference,true); @@ -146,27 +160,59 @@ void pass_preprocesst::make_to_char_array_function symbol_table.add(tmp_malloc_symbol); symbol_exprt tmp_malloc("tmp_malloc",void_star_star); + exprt data_pointer = member_exprt(dereference_exprt(tmp_assign,object_type),"data", void_star_star); new_code.push_back(code_assignt(tmp_malloc, malloc_expr_data)); new_code.push_back(code_assignt(data_pointer, tmp_malloc)); - - // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); + */ + + assert(ns.follow(object_type).id()==ID_struct); + const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); + dereference_exprt deref(tmp_assign, object_type); + member_exprt data(deref, "data", + //struct_type.components()[2].get_name(), + struct_type.components()[2].type()); + exprt array_size = member_exprt(dereference_exprt(tmp_assign,object_type) + ,"length",signedbv_typet(32)); + side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); + debug() << "data_cpp_new_expr : " << data_cpp_new_expr.pretty() << eom; + data_cpp_new_expr.set(ID_size, array_size); + + /*goto_programt dest; + symbol_exprt tmp_data_symbol= + new_tmp_symbol(void_typet(), "tmp_data", dest, location).symbol_expr(); + goto_program.instructions.insert(i_it,dest.instructions); + */ + /* auxiliary_symbolt tmp_data_symbol; - tmp_data_symbol.base_name=cprover_string_data_func; + tmp_data_symbol.base_name="tmp_data"; tmp_data_symbol.is_static_lifetime=false; tmp_data_symbol.mode=ID_java; - tmp_data_symbol.name=cprover_string_data_func; + tmp_data_symbol.name="tmp_data"; tmp_data_symbol.type=void_typet(); symbol_table.add(tmp_data_symbol); - goto_functions.function_map[cprover_string_data_func]; + */ + symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); + new_code.push_back(code_assignt(tmp_data, data_cpp_new_expr)); + new_code.push_back(code_assignt(data, tmp_data)); + // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); + + auxiliary_symbolt string_data_func_symbol; + string_data_func_symbol.base_name=cprover_string_data_func; + string_data_func_symbol.is_static_lifetime=false; + string_data_func_symbol.mode=ID_java; + string_data_func_symbol.name=cprover_string_data_func; + string_data_func_symbol.type=void_typet(); + symbol_table.add(string_data_func_symbol); + goto_functions.function_map[cprover_string_data_func]; function_application_exprt call_to_data; call_to_data.type()=void_typet(); call_to_data.add_source_location()=location; call_to_data.function()=symbol_exprt(cprover_string_data_func); call_to_data.arguments().push_back(string_argument); - call_to_data.arguments().push_back(data_pointer); - call_to_data.arguments().push_back(dereference_exprt(tmp_malloc)); + call_to_data.arguments().push_back(data); + call_to_data.arguments().push_back(dereference_exprt(tmp_data)); auxiliary_symbolt tmp_nil_symbol; tmp_nil_symbol.base_name="tmp_nil"; @@ -413,8 +459,11 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) return expr; } -pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, const namespacet & _ns, message_handlert &_message_handler): - messaget(_message_handler), symbol_table(_symbol_table),goto_functions(_goto_functions), ns(_ns) +pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, //const namespacet & _ns, + message_handlert &_message_handler): + messaget(_message_handler), symbol_table(_symbol_table), ns(_symbol_table), + //goto_convertt(_symbol_table,_message_handler), + goto_functions(_goto_functions) { // initialiasing the function maps diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 01ed1863630..d91aae2a07d 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -14,21 +14,28 @@ Date: September 2016 #include #include +//#include "goto_convert_class.h" -class pass_preprocesst:public messaget +class pass_preprocesst:public messaget { - public: - pass_preprocesst(symbol_tablet &, goto_functionst &, const namespacet &, message_handlert &); - private: + namespacet ns; symbol_tablet & symbol_table; goto_functionst & goto_functions; - const namespacet & ns; std::map string_builders; std::map side_effect_functions; std::map string_functions; std::map string_function_calls; + public: + pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, + message_handlert &); + + private: + + + symbol_exprt new_tmp_symbol(const std::string &name, const typet &type); + exprt replace_string_literals(const exprt & ); void make_string_function(goto_programt::instructionst::iterator &, irep_idt); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 3a816117390..7e64ad98658 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1237,15 +1237,14 @@ string_exprt string_constraint_generatort::of_char_array symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); exprt char_in_tab = - typecast_exprt - (byte_extract_exprt(ID_byte_extract_little_endian,data, + byte_extract_exprt(ID_byte_extract_little_endian,data, //plus_exprt - (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64)))), - /*pointer_offset(byte_extract_exprt + mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), + /*pointer_offset(byte_extract_exprt (ID_byte_extract_little_endian, data ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)),*/ - get_char_type())); + get_char_type()); string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); From 18d0af25c468bd23287efa9726973521d0f8dc7d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 14:04:00 +0100 Subject: [PATCH 172/221] Using new version of utf8 to utf16 --- .../java_char_array/test_char_array.class | Bin 857 -> 748 bytes .../java_char_array/test_char_array.java | 6 ++-- src/goto-programs/pass_preprocess.cpp | 30 ++++-------------- src/solvers/refinement/string_constraint.h | 9 ++++-- .../string_constraint_generator.cpp | 7 ++-- src/util/unicode.cpp | 27 +++++++++++++++- src/util/unicode.h | 4 ++- 7 files changed, 51 insertions(+), 32 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index ce4ba3646c1d31104ac8804f15fe6f542ef7eef3..ccfe1a6af66a7b8cba8897fb6c5c1b04dd7e6f49 100644 GIT binary patch delta 433 zcmYL_yGlbr7=*t)muzx8F)?b4Cee7m6Np;ahzfQJT8c$D2JwO@oCHA-e1?!Njit2; zUO{``z<2N&g8xRuX4&~?c4q$lihR3^pRLz-V1aoLk8G5jN1nkLQHC@H50|VbU|2Ka zG0K=`yuN(pOlT(SFFV_DIu&-XU(rnXOfl`#fv?D%1Q$W^G&nmfu2riCVeR<*Y$FWM zL!T~EibU<8S}RwMg0LKfVQ{IL@tI|=QC91XJ5`bdE?PA4Ol|1SfU@`CmY&kYS delta 534 zcmZ9IOG{fp6vuya@7z1d^`^$e#AtHsBR*nGZR?{@3Z?C?P#0Zv;X>sa1lKVO6~WIS zapgwDg*%}tv9zH3euI7oKZEv6Y#S&H=kcF2bAIRCdB6PEKkvWa0Q0;I=%JJ#3V6z} zH6uxqj2gxQd`f{NWy5&D1e1oTgM~d^F-#v^eJ(zsSK-F%bweej%1lU&XCWb}R#8P! zhODBuxv|w;t8d1QwYbrUcMP*3&w0`MqCTX2tG{n5bmil8>rgH3Cj|#ox?q2iNTZNG zV$+gE;+1%>dX4&O3+WTy8gd79Od*egE^g!PsoVdJ?%cT5KaeTjD*BFT=EhP2!BCficC@B zjgYU%Zu_MokNY5^XUKIFU=ET7szP1T+IMxr}vAQw=Uk;kRW;J?i* jcFG}>CD|r8!ss)!dx_U2{JSPg;o+p-*<}t%;!ykzc=AFB diff --git a/regression/strings/java_char_array/test_char_array.java b/regression/strings/java_char_array/test_char_array.java index 277e786d5b8..89aecb387fb 100644 --- a/regression/strings/java_char_array/test_char_array.java +++ b/regression/strings/java_char_array/test_char_array.java @@ -21,12 +21,12 @@ public static void test_to_array(String t) String s = "abc"; char [] str = s.toCharArray(); char c = str[2]; - char d = t.charAt(0); + //char d = t.charAt(0); - assert(str.length == 3); + //assert(str.length == 3); assert(c == 'c'); - assert(c == d || d < 'a' || d > 'z' ); + //assert(c == d || d < 'a' || d > 'z' ); } public static void main(String[] argv) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index cbd2d71c18a..9a706bf5275 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -169,32 +169,16 @@ void pass_preprocesst::make_to_char_array_function assert(ns.follow(object_type).id()==ID_struct); const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); dereference_exprt deref(tmp_assign, object_type); - member_exprt data(deref, "data", - //struct_type.components()[2].get_name(), - struct_type.components()[2].type()); - exprt array_size = member_exprt(dereference_exprt(tmp_assign,object_type) - ,"length",signedbv_typet(32)); + member_exprt data(deref,struct_type.components()[2].get_name(), struct_type.components()[2].type()); + member_exprt length(deref,struct_type.components()[1].get_name(), struct_type.components()[1].type()); + //"length",signedbv_typet(32)); side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); debug() << "data_cpp_new_expr : " << data_cpp_new_expr.pretty() << eom; - data_cpp_new_expr.set(ID_size, array_size); + data_cpp_new_expr.set(ID_size, length); - /*goto_programt dest; - symbol_exprt tmp_data_symbol= - new_tmp_symbol(void_typet(), "tmp_data", dest, location).symbol_expr(); - goto_program.instructions.insert(i_it,dest.instructions); - */ - /* - auxiliary_symbolt tmp_data_symbol; - tmp_data_symbol.base_name="tmp_data"; - tmp_data_symbol.is_static_lifetime=false; - tmp_data_symbol.mode=ID_java; - tmp_data_symbol.name="tmp_data"; - tmp_data_symbol.type=void_typet(); - symbol_table.add(tmp_data_symbol); - */ symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); - new_code.push_back(code_assignt(tmp_data, data_cpp_new_expr)); - new_code.push_back(code_assignt(data, tmp_data)); + //new_code.push_back(code_assignt(tmp_data, data_cpp_new_expr)); + new_code.push_back(code_assignt(data, data_cpp_new_expr)); // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); @@ -212,7 +196,7 @@ void pass_preprocesst::make_to_char_array_function call_to_data.function()=symbol_exprt(cprover_string_data_func); call_to_data.arguments().push_back(string_argument); call_to_data.arguments().push_back(data); - call_to_data.arguments().push_back(dereference_exprt(tmp_data)); + call_to_data.arguments().push_back(dereference_exprt(data)); auxiliary_symbolt tmp_nil_symbol; tmp_nil_symbol.base_name="tmp_nil"; diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index bf664f07211..49bc79335ae 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -1,7 +1,7 @@ /** -*- C++ -*- *****************************************************\ Module: String constraints - (see the PASS paper at HVC'13) + (see the PASS paper at HVC'13 and chapter 7 on arrays of ???) Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -27,14 +27,19 @@ class string_constraintt : public exprt // Universally quantified symbol symbol_exprt quantified_variable; + // Bounds on the quantified variables (alternate between inf and sup) std::vector bounds; + // Only for NOT_CONTAINS constraints (represent s1 and s2) std::vector compared_strings; + + // we should change the structure of the class to adopt the notations of chapter 7 + // exprt index_guard; public: -// used to store information about witnesses for not_contains constraints + // used to store information about witnesses for not_contains constraints symbol_exprt witness; diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 7e64ad98658..ce34bdac3e5 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -313,16 +313,19 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch string_exprt res(char_type); std::string str = sval.c_str(); // should only do this for java - std::wstring utf16 = utf8_to_utf16(str); + std::wstring utf16 = utf8_to_utf16le(str); // warning: endianness should be used as a flag when using this function for (std::size_t i = 0; i < utf16.size(); ++i) { std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); constant_exprt idx(idx_binary, refined_string_typet::index_type()); // warning: this should disappear if utf8_to_utf16 takes into account endianness + /* wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); - + std::string sval_binary=integer2binary((unsigned)big_endian, char_width); + */ + std::string sval_binary=integer2binary((unsigned)utf16[i], char_width); constant_exprt c(sval_binary,char_type); equal_exprt lemma(res[idx], c); axioms.emplace_back(lemma,true); diff --git a/src/util/unicode.cpp b/src/util/unicode.cpp index ee675cb8834..cb22f3a5d65 100644 --- a/src/util/unicode.cpp +++ b/src/util/unicode.cpp @@ -256,8 +256,33 @@ const char **narrow_argv(int argc, const wchar_t **argv_wide) return argv_narrow; } -std::wstring utf8_to_utf16(const std::string& in) +std::wstring utf8_to_utf16be(const std::string& in) { std::wstring_convert > converter; return converter.from_bytes(in); } + +std::wstring utf8_to_utf16le(const std::string& in) +{ + std::wstring_convert > converter; + return converter.from_bytes(in); +} + +std::string utf16le_to_ascii(const std::wstring& in) +{ + std::string result; + std::locale loc; + for(const auto c : in) + { + if(c <= 255 && isprint(c,loc)) + result+=(unsigned char)c; + else + { + result+="\\u"; + char hex[5]; + sprintf(hex,"%04x",(wchar_t)c); + result+=hex; + } + } + return result; +} diff --git a/src/util/unicode.h b/src/util/unicode.h index 05bc84a463d..e22bb10574c 100644 --- a/src/util/unicode.h +++ b/src/util/unicode.h @@ -21,8 +21,10 @@ std::wstring widen(const std::string &s); std::string utf32_to_utf8(const std::basic_string &s); std::string utf16_to_utf8(const std::basic_string &s); +std::string utf16le_to_ascii(const std::wstring&); -std::wstring utf8_to_utf16(const std::string&); +std::wstring utf8_to_utf16be(const std::string&); +std::wstring utf8_to_utf16le(const std::string&); const char **narrow_argv(int argc, const wchar_t **argv_wide); From 4b1eed8c010417b73870ee0b6a8667c640681aad Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 15:17:18 +0100 Subject: [PATCH 173/221] Using a new[] instead for the data part of array in toCharArray --- .../java_char_array/test_char_array.class | Bin 748 -> 796 bytes .../java_char_array/test_char_array.java | 8 +++-- src/goto-programs/pass_preprocess.cpp | 32 ++++++++---------- src/goto-programs/pass_preprocess.h | 2 ++ 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index ccfe1a6af66a7b8cba8897fb6c5c1b04dd7e6f49..2512d935d3400570b5133f59c7e45aab6320758d 100644 GIT binary patch delta 300 zcmZvWO)mps6osGnoi7H}cBZYbMk6$IR3a>}5L@xJ>Ow3glctG<)#%1XtnDVV6Vd(! zA_!7@zr}CBRhBmQo^x{Ux#z>Ww%zy7=N_=aQsSN`UEgq+Pwqowfm&Krvy&OcXuEaV z4x7hO97b^*ojC-FwH&{;eE%Kh^B+* x;5!r)cpigtR{ASf5u2!(PdK-IoR#THWtfu()wHA6{hu%kJ+h_5JT62t@eSCdFpK~I delta 270 zcmbQk_J)<~)W2Q(7#J9g8FVLd)#-?8_+%xPCF1k(7-ffASuSc z3M54tn1L(~25|-+1{nqg1~~>{pePRm<39!kb_Nl422n-^PM`{LsL9Ge-HbpL>{`r5 sI~dqO#xa78;{r-BFeo#yF{n&F&txeAGKQ6biPwP 'z' ); + assert(c != 'c'); } public static void main(String[] argv) { //test_init(); - test_to_array(argv[0]); + test_to_array();//argv[0]); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 9a706bf5275..965e4cca567 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -30,6 +30,18 @@ symbol_exprt pass_preprocesst::new_tmp_symbol return symbol_exprt(name,type); } +void pass_preprocesst::declare_function(irep_idt function_name, const typet &type) +{ + auxiliary_symbolt func_symbol; + func_symbol.base_name=function_name; + func_symbol.is_static_lifetime=false; + func_symbol.mode=ID_java; + func_symbol.name=function_name; + func_symbol.type=type; + symbol_table.add(func_symbol); + goto_functions.function_map[function_name]; +} + void pass_preprocesst::make_string_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { @@ -116,14 +128,7 @@ void pass_preprocesst::make_to_char_array_function new_code.push_back(assign_malloc); // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - auxiliary_symbolt tmp_length_symbol; - tmp_length_symbol.base_name=cprover_string_length_func; - tmp_length_symbol.is_static_lifetime=false; - tmp_length_symbol.mode=ID_java; - tmp_length_symbol.name=cprover_string_length_func; - tmp_length_symbol.type=unsignedbv_typet(32); - symbol_table.add(tmp_length_symbol); - goto_functions.function_map[cprover_string_length_func]; + declare_function(cprover_string_length_func,unsignedbv_typet(32)); function_application_exprt call_to_length; call_to_length.type()=unsignedbv_typet(32); @@ -173,8 +178,8 @@ void pass_preprocesst::make_to_char_array_function member_exprt length(deref,struct_type.components()[1].get_name(), struct_type.components()[1].type()); //"length",signedbv_typet(32)); side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); - debug() << "data_cpp_new_expr : " << data_cpp_new_expr.pretty() << eom; data_cpp_new_expr.set(ID_size, length); + debug() << "data_cpp_new_expr : " << data_cpp_new_expr.pretty() << eom; symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); //new_code.push_back(code_assignt(tmp_data, data_cpp_new_expr)); @@ -182,14 +187,7 @@ void pass_preprocesst::make_to_char_array_function // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); - auxiliary_symbolt string_data_func_symbol; - string_data_func_symbol.base_name=cprover_string_data_func; - string_data_func_symbol.is_static_lifetime=false; - string_data_func_symbol.mode=ID_java; - string_data_func_symbol.name=cprover_string_data_func; - string_data_func_symbol.type=void_typet(); - symbol_table.add(string_data_func_symbol); - goto_functions.function_map[cprover_string_data_func]; + declare_function(cprover_string_data_func,void_typet()); function_application_exprt call_to_data; call_to_data.type()=void_typet(); call_to_data.add_source_location()=location; diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index d91aae2a07d..191530dc8fc 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -36,6 +36,8 @@ class pass_preprocesst:public messaget symbol_exprt new_tmp_symbol(const std::string &name, const typet &type); + void declare_function(irep_idt function_name, const typet &type); + exprt replace_string_literals(const exprt & ); void make_string_function(goto_programt::instructionst::iterator &, irep_idt); From e475213aee0ba529be81e3bcbf43563844a2055c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Oct 2016 16:33:51 +0100 Subject: [PATCH 174/221] simplification of some methods in PASS preprocessing --- .../java_char_array/test_char_array.class | Bin 796 -> 820 bytes .../java_char_array/test_char_array.java | 32 +-- src/goto-programs/pass_preprocess.cpp | 184 ++++++------------ src/goto-programs/pass_preprocess.h | 15 +- 4 files changed, 70 insertions(+), 161 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.class b/regression/strings/java_char_array/test_char_array.class index 2512d935d3400570b5133f59c7e45aab6320758d..836942da1346e6bee0164979a451b7eec1a18c9b 100644 GIT binary patch delta 436 zcmZ8dOD_Xa6#i~!=H7NXrKTOUUc;g_Ra!J6Sk%Ho;;|?Tv5>2gdX&hRNZ8o;1I_G2 zBH|YiAwk-GE&L;#vXEGubMF1l_np@@f8S3r1X2QNfnfos)|d;Y4P-E4Ad69-F+0i7?(Lj-TjgEp zZb{dbX98mea>)BdX2oNhOZ)Ov=Bo0jk}G-c-ce=NFR?;|w*>PZgF3wE_?K*fDSngX zFHBHH8uuLm2#SYhU}@wD%5n#re$!X7T474fC=)YULQ|fgPVon5SLn#r`3=Ia;2X~n zjUUXk)M)uXXj`g9%!I|G@)jnA^SeLYJ=Q^eqtrJ;w*oXMbeSMc(ndap5V{Gs5k>(9 z77;;}GBINILir+42*d>}flh%gMlS}$hy0H~Dy`iU?YB6mB|+8_Y6wJ%j6R8^(qz9kEo%`j7R-x?5@~Aw)Gxs{%2| zn4()8K};ip-6Txf 'z' ); - assert(c != 'c'); - } - - public static void main(String[] argv) - { - //test_init(); - test_to_array();//argv[0]); + assert(c == d || d < 'a' || d > 'z' ); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 965e4cca567..3a883cdf24b 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -45,25 +45,11 @@ void pass_preprocesst::declare_function(irep_idt function_name, const typet &typ void pass_preprocesst::make_string_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { - // replace "lhs=s.charAt(x)" by "lhs=__CPROVER_uninterpreted_string_char_at(s,i)" - // Warning: in pass_preprocess::make_string_function: - // we should introduce an intermediary variable for each argument code_function_callt &function_call=to_code_function_call(i_it->code); - code_typet old_type=to_code_type(function_call.function().type()); - - auxiliary_symbolt tmp_symbol; - //tmp_symbol.base_name=base_name; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=function_name; - // tmp_symbol.type=type; - tmp_symbol.type=old_type; - symbol_table.add(tmp_symbol); - // make sure it is in the function map - goto_functions.function_map[irep_idt(function_name)]; - + code_typet function_type=to_code_type(function_call.function().type()); + declare_function(function_name,function_type); function_application_exprt rhs; - rhs.type()=old_type.return_type(); + rhs.type()=function_type.return_type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); for(unsigned i = 0; i < function_call.arguments().size(); i++) @@ -74,6 +60,47 @@ void pass_preprocesst::make_string_function i_it->code=assignment; } +void pass_preprocesst::make_string_function_call +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + code_typet function_type=to_code_type(function_call.function().type()); + declare_function(function_name,function_type); + function_application_exprt rhs; + rhs.type()=function_call.arguments()[0].type(); + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(function_name); + for(unsigned i = 1; i < function_call.arguments().size(); i++) + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + code_assignt assignment(function_call.arguments()[0], rhs); + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; +} + +void pass_preprocesst::make_string_function_side_effect +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + code_typet function_type=to_code_type(function_call.function().type()); + declare_function(function_name,function_type); + function_application_exprt rhs; + typet return_type = function_call.arguments()[0].type(); + rhs.type()=return_type; + rhs.add_source_location()=function_call.source_location(); + rhs.function()=symbol_exprt(function_name); + for(unsigned i = 0; i < function_call.arguments().size(); i++) + rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + code_assignt assignment(function_call.arguments()[0], rhs); + + // add a mapping from the left hand side to the first argument + string_builders[function_call.lhs()]=function_call.arguments()[0]; + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; +} + void pass_preprocesst::make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { @@ -255,113 +282,6 @@ void pass_preprocesst::make_of_char_array_function make_string_function_call(i_it,function_name); } -void pass_preprocesst::make_string_function_of_assign -(goto_programt::instructionst::iterator & i_it, irep_idt function_name) -{ - assert(i_it->is_assign()); - code_assignt &assign=to_code_assign(i_it->code); - typet old_type=assign.rhs().type(); - - auxiliary_symbolt tmp_symbol; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=function_name; - symbol_table.add(tmp_symbol); - - exprt rhs = replace_string_literals(assign.rhs().op0()); - /*function_application_exprt rhs; - rhs.type()=old_type; - rhs.add_source_location()=assign.source_location(); - rhs.function()=symbol_exprt(function_name); - rhs.arguments().push_back(address_of_exprt(assign.rhs().op0()));*/ - code_assignt assignment(assign.lhs(), rhs); - assignment.add_source_location()=assign.source_location(); - i_it->make_assignment(); - i_it->code=assignment; - goto_functions.function_map[irep_idt(function_name)]; -} - -void pass_preprocesst::make_string_function_call -(goto_programt::instructionst::iterator & i_it, irep_idt function_name) -{ - // replace "s.init(x)" by "s=__CPROVER_uninterpreted_string_literal(x)" - code_function_callt &function_call=to_code_function_call(i_it->code); - code_typet old_type=to_code_type(function_call.function().type()); - - auxiliary_symbolt tmp_symbol; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=function_name; - symbol_table.add(tmp_symbol); - - function_application_exprt rhs; - rhs.type()=function_call.arguments()[0].type(); - rhs.add_source_location()=function_call.source_location(); - rhs.function()=symbol_exprt(function_name); - for(unsigned i = 1; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); - code_assignt assignment(function_call.arguments()[0], rhs); - assignment.add_source_location()=function_call.source_location(); - i_it->make_assignment(); - i_it->code=assignment; - // make sure it is in the function map - goto_functions.function_map[irep_idt(function_name)]; -} - -void pass_preprocesst::make_string_function_side_effect -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name) -{ - // replace "r = s.append(x)" by "s=__CPROVER_uninterpreted_string_concat(s,x); r = s" - code_function_callt &function_call=to_code_function_call(i_it->code); - code_typet old_type=to_code_type(function_call.function().type()); - - auxiliary_symbolt tmp_symbol; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=function_name; - symbol_table.add(tmp_symbol); - - function_application_exprt rhs; - typet return_type = function_call.arguments()[0].type(); - rhs.type()=return_type; - rhs.add_source_location()=function_call.source_location(); - rhs.function()=symbol_exprt(function_name); - - for(unsigned i = 0; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); - - code_assignt assignment(function_call.arguments()[0], rhs); - //code_assignt assignment2(function_call.lhs(), function_call.arguments()[0]); - - // add a mapping from the left hand side to the first argument - string_builders[function_call.lhs()]=function_call.arguments()[0]; - assignment.add_source_location()=function_call.source_location(); - i_it->make_assignment(); - i_it->code=assignment; - // make sure it is in the function map - goto_functions.function_map[irep_idt(function_name)]; - - //i_it = goto_program.insert_after(i_it); - //i_it->make_assignment(); - //i_it->code=assignment2; - // add a mapping from the left hand side to the first argument - //string_builders[function_call.lhs()]=function_call.arguments()[0]; -} - - -bool pass_preprocesst::has_java_string_type(const exprt &expr) -{ - const typet type = expr.type(); - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - if(subtype.id() == ID_symbol) { - irep_idt tag = to_symbol_type(subtype).get_identifier(); - return (tag == irep_idt("java::java.lang.String")); - } else return false; - } else return false; -} void pass_preprocesst::replace_string_calls @@ -414,6 +334,19 @@ void pass_preprocesst::replace_string_calls return; } +bool pass_preprocesst::has_java_string_type(const exprt &expr) +{ + const typet type = expr.type(); + if(type.id() == ID_pointer) { + pointer_typet pt = to_pointer_type(type); + typet subtype = pt.subtype(); + if(subtype.id() == ID_symbol) { + irep_idt tag = to_symbol_type(subtype).get_identifier(); + return (tag == irep_idt("java::java.lang.String")); + } else return false; + } else return false; +} + exprt pass_preprocesst::replace_string_literals(const exprt & expr) { if(has_java_string_type(expr) ) @@ -441,10 +374,9 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) return expr; } -pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, //const namespacet & _ns, +pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, message_handlert &_message_handler): messaget(_message_handler), symbol_table(_symbol_table), ns(_symbol_table), - //goto_convertt(_symbol_table,_message_handler), goto_functions(_goto_functions) { diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 191530dc8fc..2b5ba427ecf 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -33,14 +33,20 @@ class pass_preprocesst:public messaget private: - + // add a temporary symbol to the symbol table symbol_exprt new_tmp_symbol(const std::string &name, const typet &type); void declare_function(irep_idt function_name, const typet &type); exprt replace_string_literals(const exprt & ); - void make_string_function(goto_programt::instructionst::iterator &, irep_idt); + // replace "lhs=s.some_function(x,...)" by "lhs=function_name(s,x,...)" + void make_string_function + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); + + // replace "s.some_function(x,...)" by "s=function_name(x,...)" + void make_string_function_call + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); @@ -49,11 +55,6 @@ class pass_preprocesst:public messaget (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt); - void make_string_function_of_assign - (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - - void make_string_function_call - (goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_string_function_side_effect (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, From dec2cbdedd07446c482cb9a305215e4180a3c8cc Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 28 Oct 2016 13:48:31 +0100 Subject: [PATCH 175/221] correcting the constraint generation from the of_char_array function --- src/goto-programs/pass_preprocess.h | 10 ++++++---- .../refinement/string_constraint_generator.cpp | 16 ++++------------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 2b5ba427ecf..eff951f4f71 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -48,6 +48,12 @@ class pass_preprocesst:public messaget void make_string_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); + // replace "r = s.some_function(x,...)" by "s=function_name(s,x)" + // and add a correspondance from r to s in the string_builders map + void make_string_function_side_effect + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name); + void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); @@ -56,10 +62,6 @@ class pass_preprocesst:public messaget irep_idt); - void make_string_function_side_effect - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name); - bool has_java_string_type(const exprt &expr); void replace_string_calls(goto_functionst::function_mapt::iterator f_it); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index ce34bdac3e5..8e7ffe4e5f9 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1228,7 +1228,6 @@ exprt string_constraint_generatort::string_data return void_expr; } - string_exprt string_constraint_generatort::of_char_array (const function_application_exprt &f) { @@ -1239,17 +1238,10 @@ string_exprt string_constraint_generatort::of_char_array exprt data = args(f,3)[2]; symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); - exprt char_in_tab = - byte_extract_exprt(ID_byte_extract_little_endian,data, - //plus_exprt - mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), - /*pointer_offset(byte_extract_exprt - (ID_byte_extract_little_endian, - data - ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)),*/ - get_char_type()); - - + exprt char_in_tab = data; + assert(char_in_tab.id() == ID_index); + char_in_tab.op1() = qvar; + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); axioms.push_back(eq.forall(qvar,str.length())); axioms.emplace_back(equal_exprt(str.length(),tab_length)); From 4114064a2a64c541d3b48f2b763fede7efdf70e8 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 28 Oct 2016 13:54:08 +0100 Subject: [PATCH 176/221] tests for the of_char_array function --- .../strings/java_char_array/test_init.class | Bin 0 -> 1024 bytes .../strings/java_char_array/test_init.java | 19 ++++++++++++++++++ .../strings/java_char_array_init/test.desc | 9 +++++++++ .../java_char_array_init/test_init.class | Bin 0 -> 1024 bytes .../java_char_array_init/test_init.java | 19 ++++++++++++++++++ src/goto-programs/pass_preprocess.cpp | 1 - .../string_constraint_generator.cpp | 5 ++--- 7 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 regression/strings/java_char_array/test_init.class create mode 100644 regression/strings/java_char_array/test_init.java create mode 100644 regression/strings/java_char_array_init/test.desc create mode 100644 regression/strings/java_char_array_init/test_init.class create mode 100644 regression/strings/java_char_array_init/test_init.java diff --git a/regression/strings/java_char_array/test_init.class b/regression/strings/java_char_array/test_init.class new file mode 100644 index 0000000000000000000000000000000000000000..50ad0294c1566b6ac92ed2e488217cd2b52bffc1 GIT binary patch literal 1024 zcmZvbTTc@~6vzM5c6Zuk+pb(HsE8;^VUa2qFSH_9HIRUs)M|hSv$PXj-0tG;*2G8s z7`*uCvzU}bjK2FZ{2;_L%N@xkb2;aK&Ybg`*+08KegPOqS%ZN-jw>2s=uhD)u4x#+ zb-BGESA!{JkWXSrT824H4Q=R?n-Pwi8b(pzxW&*hUVhG=V7ua3v#~1tmr_iQhGn}9x%|q)y7j>-IF`FssD!@lt`%iq zx)NHocZ=3Wr02LzRWl?@HD^D+R`HsCO+2+_woE93@Qw70%4|A1(8*w&&MfU?9OF7B zFv)R8$6eghaUWB1Rn&0~?F`DCa2!uZ2@e>$k8;c&wEV>PJzvK(9x|j3Pv)4>F^fkh z&V9bRE@~k|Y^6+z^DAZ9+wr28O+_ms+bQ$x+JU=gw*MiXU!{D_oJ!gi>dlc`RmJ^&3?6p%IB0=^DOxdB= zKzCUef$fX>At$=Rut^Sj3d`uHmu1i^WJb5dOshDkGj!6}MY~>_8O_S@HrO{QM2nmd^e=@bX#Q+yKa~YDZp>B9gdwV?VmMV(l>;}t>JDN{<~HJsrZO?Tg~Uh; z%HE{5z_*axMCV9*ss(KmZ98aN+J^pn-`s*~XkY#_OLh8~TGknh>YSqXsCfERXyC{q zNv);OL%YlL6AeO#i8RJYS0ZnPV5}2}PlTd}A~T5ZqQY^3<08xDDEiVNn#qU((B6Se f3)xNZ#8)KZ-;q2z|A3Rsr687`ku-aw@-F`aS6t7O literal 0 HcmV?d00001 diff --git a/regression/strings/java_char_array/test_init.java b/regression/strings/java_char_array/test_init.java new file mode 100644 index 00000000000..44e29648670 --- /dev/null +++ b/regression/strings/java_char_array/test_init.java @@ -0,0 +1,19 @@ +public class test_init { + + public static void main(String[] argv) + { + char [] str = new char[10]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + String s = new String(str); + char c = str[2]; + System.out.println(s); + System.out.println(s.length()); + assert(s.startsWith("Hello")); + assert(s.length() == 10); + assert(s.equals("Hello")); + } +} diff --git a/regression/strings/java_char_array_init/test.desc b/regression/strings/java_char_array_init/test.desc new file mode 100644 index 00000000000..9f090ee4266 --- /dev/null +++ b/regression/strings/java_char_array_init/test.desc @@ -0,0 +1,9 @@ +CORE +test_init.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_init.java line 15: SUCCESS$ +^\[assertion.2\] assertion at file test_init.java line 16: SUCCESS$ +^\[assertion.3\] assertion at file test_init.java line 17: FAILURE$ +-- \ No newline at end of file diff --git a/regression/strings/java_char_array_init/test_init.class b/regression/strings/java_char_array_init/test_init.class new file mode 100644 index 0000000000000000000000000000000000000000..50ad0294c1566b6ac92ed2e488217cd2b52bffc1 GIT binary patch literal 1024 zcmZvbTTc@~6vzM5c6Zuk+pb(HsE8;^VUa2qFSH_9HIRUs)M|hSv$PXj-0tG;*2G8s z7`*uCvzU}bjK2FZ{2;_L%N@xkb2;aK&Ybg`*+08KegPOqS%ZN-jw>2s=uhD)u4x#+ zb-BGESA!{JkWXSrT824H4Q=R?n-Pwi8b(pzxW&*hUVhG=V7ua3v#~1tmr_iQhGn}9x%|q)y7j>-IF`FssD!@lt`%iq zx)NHocZ=3Wr02LzRWl?@HD^D+R`HsCO+2+_woE93@Qw70%4|A1(8*w&&MfU?9OF7B zFv)R8$6eghaUWB1Rn&0~?F`DCa2!uZ2@e>$k8;c&wEV>PJzvK(9x|j3Pv)4>F^fkh z&V9bRE@~k|Y^6+z^DAZ9+wr28O+_ms+bQ$x+JU=gw*MiXU!{D_oJ!gi>dlc`RmJ^&3?6p%IB0=^DOxdB= zKzCUef$fX>At$=Rut^Sj3d`uHmu1i^WJb5dOshDkGj!6}MY~>_8O_S@HrO{QM2nmd^e=@bX#Q+yKa~YDZp>B9gdwV?VmMV(l>;}t>JDN{<~HJsrZO?Tg~Uh; z%HE{5z_*axMCV9*ss(KmZ98aN+J^pn-`s*~XkY#_OLh8~TGknh>YSqXsCfERXyC{q zNv);OL%YlL6AeO#i8RJYS0ZnPV5}2}PlTd}A~T5ZqQY^3<08xDDEiVNn#qU((B6Se f3)xNZ#8)KZ-;q2z|A3Rsr687`ku-aw@-F`aS6t7O literal 0 HcmV?d00001 diff --git a/regression/strings/java_char_array_init/test_init.java b/regression/strings/java_char_array_init/test_init.java new file mode 100644 index 00000000000..44e29648670 --- /dev/null +++ b/regression/strings/java_char_array_init/test_init.java @@ -0,0 +1,19 @@ +public class test_init { + + public static void main(String[] argv) + { + char [] str = new char[10]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + String s = new String(str); + char c = str[2]; + System.out.println(s); + System.out.println(s.length()); + assert(s.startsWith("Hello")); + assert(s.length() == 10); + assert(s.equals("Hello")); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 3a883cdf24b..a54b2ac0f4d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -277,7 +277,6 @@ void pass_preprocesst::make_of_char_array_function function_call.arguments().clear(); function_call.arguments().push_back(lhs); function_call.arguments().push_back(array_size); - function_call.arguments().push_back(data_pointer); function_call.arguments().push_back(data); make_string_function_call(i_it,function_name); } diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 8e7ffe4e5f9..6c75430922b 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1233,9 +1233,8 @@ string_exprt string_constraint_generatort::of_char_array { string_exprt str(get_char_type()); - exprt tab_length = args(f,3)[0]; - exprt tab_data = args(f,3)[1]; - exprt data = args(f,3)[2]; + exprt tab_length = args(f,2)[0]; + exprt data = args(f,2)[1]; symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); exprt char_in_tab = data; From f951abbc68cca86ef9b82db2468050853c1d3758 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 28 Oct 2016 14:24:56 +0100 Subject: [PATCH 177/221] string initialisation from char array with offset and count arguments --- .../strings/java_char_array_init/test.desc | 7 ++--- .../java_char_array_init/test_init.class | Bin 1024 -> 1140 bytes .../java_char_array_init/test_init.java | 4 ++- src/goto-programs/pass_preprocess.cpp | 12 ++++++--- .../string_constraint_generator.cpp | 24 ++++++++++++++---- 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/regression/strings/java_char_array_init/test.desc b/regression/strings/java_char_array_init/test.desc index 9f090ee4266..d6b3ef98fe1 100644 --- a/regression/strings/java_char_array_init/test.desc +++ b/regression/strings/java_char_array_init/test.desc @@ -3,7 +3,8 @@ test_init.class --pass ^EXIT=10$ ^SIGNAL=0$ -^\[assertion.1\] assertion at file test_init.java line 15: SUCCESS$ -^\[assertion.2\] assertion at file test_init.java line 16: SUCCESS$ -^\[assertion.3\] assertion at file test_init.java line 17: FAILURE$ +^\[assertion.1\] assertion at file test_init.java line 16: SUCCESS$ +^\[assertion.2\] assertion at file test_init.java line 17: SUCCESS$ +^\[assertion.3\] assertion at file test_init.java line 18: SUCCESS$ +^\[assertion.4\] assertion at file test_init.java line 19: FAILURE$ -- \ No newline at end of file diff --git a/regression/strings/java_char_array_init/test_init.class b/regression/strings/java_char_array_init/test_init.class index 50ad0294c1566b6ac92ed2e488217cd2b52bffc1..fa7e3f6c6c8abfbef531e61ab90856eb5d21cd6a 100644 GIT binary patch delta 666 zcmZ9ITWb?h6otPtndzBKC+##zV{47I_0mgHqqP@p)z-#KBSl3)ED=hS5K=+}9r{{- zfIgHwnHL{@Qn11VEap9K55bk`* zto4&pc$=lIQm$62S916Kr`3AJrJwU*xS&~ZS>&STlFMb5T$Z^KRx2(Ek_v0JT&q2C z$#b=_poShQjB?H88rKz3zx>SKsMf2#=7!5Eh5vTlezaMB>?;z*wN3$xLQ~8O`*<-w zabKY&7YdCR>c?GA>;UBrg!`q6phRd&;vwnMl9gm@vW0pd4l*FIs||`G201LXjH(eV z`QTmSn=!V%hq0b9trq63j5RZ7?qX#Fy7rR}uy=_zNoM0tKzEbwJ>2ycvCju^fcBi% zo$yq=C!n`;I^8A_IJtlSN}eST=t9XxTk;BCqY@d}o+idTJz{yUIOwrKA6w$VOZoq| z;=qu+7{vS~7nbITCapOtM_fpyhOrs`YtC%j1&Al`0{WV0^9^R?1JQqL|2P%WS{N~R LIW+WGTh_>LRcUA# delta 556 zcmZXQOHUI~6vuzJGt)bBI~{5Zm4}FLkXEZaL=kz|jd7!qjfRD(rZF@PE|?H^KE45& zT{kXWi^-5c0&&ZhFF^bZ?o5d1)@MR)a$fg;&iVh(cmJLL_~3YF516EGC@`WqXUK3q z-~ty7m$+=xD>fPph#2#^YAfTKiXq2{O{$t}hU?TcH#VQf?oFApd025u^d?I6)k;ig zCPSu}*4zr2;daO!W^HsgUh+^4&4kRepa|mTdi;EKZ8g>`hAeSk zQD`+b8nt#~?N#m3i&pbxtjMg?WyIJ@J^8ABJc&dJs6xLTEs=vlxQOkOY*@S!?~QMx zK3gDVvDt1>HgcMNi7oV-w7TLyB#|@vw&G3AZ{b!`yk9PxqPOrn^j3>Ois_KsCHHKb zaQ}BXC0j5bPn0b>{~y}2$aGoE%8iAZyetMy555o&7{DY)PVlBeo(aLs$CA8 zB62{wBAjEEHG`TVRW3{CnZKf^yXv4=B1-A$pxsZn&KLZDyZ>Ck&hp6Q7ww&fyVTD9 E1fao7V*mgE diff --git a/regression/strings/java_char_array_init/test_init.java b/regression/strings/java_char_array_init/test_init.java index 44e29648670..66d2e71e78e 100644 --- a/regression/strings/java_char_array_init/test_init.java +++ b/regression/strings/java_char_array_init/test_init.java @@ -9,11 +9,13 @@ public static void main(String[] argv) str[3] = 'l'; str[4] = 'o'; String s = new String(str); + String t = new String(str,1,2); char c = str[2]; System.out.println(s); System.out.println(s.length()); assert(s.startsWith("Hello")); assert(s.length() == 10); - assert(s.equals("Hello")); + assert(t.equals("el")); + assert(s.equals("Hello") || !t.equals("el")); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index a54b2ac0f4d..b189cd48d52 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -274,10 +274,14 @@ void pass_preprocesst::make_of_char_array_function pointer_typet(pointer_typet(unsignedbv_typet(16)))); exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); - function_call.arguments().clear(); - function_call.arguments().push_back(lhs); + std::vector::iterator it = function_call.arguments().begin(); + it++; *it = array_size; it++; + function_call.arguments().insert(it,data); + /* function_call.arguments().push_back(lhs); function_call.arguments().push_back(array_size); function_call.arguments().push_back(data); + for(int i = 2; i < function_call.arguments().size(); i++) + function_call.arguments().push_back(function_call.arguments()[i]);*/ make_string_function_call(i_it,function_name); } @@ -312,7 +316,9 @@ void pass_preprocesst::replace_string_calls else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - else if(function_id == irep_idt("java::java.lang.String.:([C)V")) + else if(function_id == irep_idt("java::java.lang.String.:([C)V") + || function_id == irep_idt("java::java.lang.String.:([CII)V") + ) make_of_char_array_function(goto_program,i_it,cprover_string_of_char_array_func); } diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 6c75430922b..b88c3a08f79 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1232,18 +1232,32 @@ string_exprt string_constraint_generatort::of_char_array (const function_application_exprt &f) { string_exprt str(get_char_type()); + + exprt offset; + exprt count; + if(f.arguments().size() == 4) + { + offset = f.arguments()[2]; + count = f.arguments()[3]; + } + else + { + assert(f.arguments().size() == 2); + count = f.arguments()[0]; + offset = constant_signed(0,32); + } - exprt tab_length = args(f,2)[0]; - exprt data = args(f,2)[1]; + exprt tab_length = f.arguments()[0]; + exprt data = f.arguments()[1]; symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); exprt char_in_tab = data; assert(char_in_tab.id() == ID_index); - char_in_tab.op1() = qvar; + char_in_tab.op1() = plus_exprt(qvar,offset); string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.forall(qvar,str.length())); - axioms.emplace_back(equal_exprt(str.length(),tab_length)); + axioms.push_back(eq.forall(qvar,count)); + axioms.emplace_back(equal_exprt(str.length(),count)); return str; } From 46fcfb4ba780d765303ec3fcd41f7ba192f5a78c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 28 Oct 2016 15:24:33 +0100 Subject: [PATCH 178/221] string.valueOf for char arrays --- .../java_char_array_init/test_init.class | Bin 1140 -> 1081 bytes .../java_char_array_init/test_init.java | 3 ++ src/goto-programs/pass_preprocess.cpp | 26 +++++++++--------- src/goto-programs/pass_preprocess.h | 3 ++ 4 files changed, 19 insertions(+), 13 deletions(-) diff --git a/regression/strings/java_char_array_init/test_init.class b/regression/strings/java_char_array_init/test_init.class index fa7e3f6c6c8abfbef531e61ab90856eb5d21cd6a..7ac97bd0ddd7ab4eb0653d91bb462a2029bd71a9 100644 GIT binary patch delta 511 zcmY+9%TE(g6vlsdrqkOQrW8u61;JNQ`#?utJ^*=!M-vl_hD77SbWv+b(}j*KTuJx~ z$gJ!?;2KRpATi@{wUiSvXN5R zAj2)647W9ReC{%(nf96Cp3f|E2F?2{u;`PfPhmw%YB=qNwO8S@MynBOmVH)Ojds+x zyxyudU)R>3D{_UWOO;CT{$_Qn8Z@h|dhjTG*=W_Lqq?>6FeOWY>dBdzf^3vH$VxmT z*^sbBRG%W>xu?v(QZuT8e!Nq6nzx9K_} z`Q(7^umADyPI;qYbu?y4MaOpVCc^`<^FlP<3O^wA0jxhl#5LzMgPI{ZN-k1QaQ>h9 l$&O1%_mSGCr;U!iCuV=dJ5@Q^#LRWDlJjQY3mp>|{{o2eMO^>@ delta 599 zcmZ9J%TH556vlsZZ!dH2aM4R?D<~Bys64GNe4&C(kYZeEh>w_%E*h+9x}Z12jqxvV zLGH>X#-%Gs(4<67G;Uq-$GBF{6qTfz$$5P9%{k|r`Q-ofAO86D`73aNJBBm`&6vSq z+?taCr#NkxVA7^jHkuBInDLpl$Qe!15K{0tYx8rO^F~Tt)XZ(I#`==xvJ~9fn_kM2 zQ$)`yo0Vd{(pWFvk2h+K^^h!AthuVW7BbIu&5e+oEQBm_%SNS;0Wu1&T&*W1H9qWA z>mf_rRs?ai8L!nEwOF$pQf4K2uD*|%W?b2bn-6O7Q$=>-ZgH@~ Tzh|&zJ)FKp`&cI=aTxsr4jEdK diff --git a/regression/strings/java_char_array_init/test_init.java b/regression/strings/java_char_array_init/test_init.java index 66d2e71e78e..41817570482 100644 --- a/regression/strings/java_char_array_init/test_init.java +++ b/regression/strings/java_char_array_init/test_init.java @@ -17,5 +17,8 @@ public static void main(String[] argv) assert(s.length() == 10); assert(t.equals("el")); assert(s.equals("Hello") || !t.equals("el")); + String u = String.valueOf(str,3,2); + //assert(u.equals("lo")); + //assert(!u.equals("lo")); } } diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b189cd48d52..3f519efa82d 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -255,8 +255,8 @@ void pass_preprocesst::make_to_char_array_function void pass_preprocesst::make_of_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) { - // replace "return_tmp0 = String.ofCharArray(arr)" with: - // return_tmp0 = __CPROVER_uninterpreted_string_of_char_array_func(arr.length,arr.data); + // replace "return_tmp0 = some_function(arr,...)" with: + // return_tmp0 = function_name(arr.length,arr.data,...); code_function_callt &function_call=to_code_function_call(i_it->code); exprt lhs = function_call.arguments()[0]; exprt arg = function_call.arguments()[1]; @@ -277,11 +277,6 @@ void pass_preprocesst::make_of_char_array_function std::vector::iterator it = function_call.arguments().begin(); it++; *it = array_size; it++; function_call.arguments().insert(it,data); - /* function_call.arguments().push_back(lhs); - function_call.arguments().push_back(array_size); - function_call.arguments().push_back(data); - for(int i = 2; i < function_call.arguments().size(); i++) - function_call.arguments().push_back(function_call.arguments()[i]);*/ make_string_function_call(i_it,function_name); } @@ -314,12 +309,11 @@ void pass_preprocesst::replace_string_calls else if(string_function_calls.find(function_id) != string_function_calls.end()) make_string_function_call(i_it, string_function_calls[function_id]); + else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) + make_of_char_array_function(goto_program,i_it,string_of_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - else if(function_id == irep_idt("java::java.lang.String.:([C)V") - || function_id == irep_idt("java::java.lang.String.:([CII)V") - ) - make_of_char_array_function(goto_program,i_it,cprover_string_of_char_array_func); + } } @@ -437,8 +431,8 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; - string_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; - string_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; + //string_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; + //string_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; @@ -463,6 +457,12 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; + + string_of_char_array_functions[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; + Forall_goto_functions(it, goto_functions) { diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index eff951f4f71..880026d26fb 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -26,6 +26,7 @@ class pass_preprocesst:public messaget std::map side_effect_functions; std::map string_functions; std::map string_function_calls; + std::map string_of_char_array_functions; public: pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, @@ -57,6 +58,8 @@ class pass_preprocesst:public messaget void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); + // replace "r = some_function(arr,...)" by + // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt); From abf01a96233ecff725bedad6ace8d26df8f24324 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 13:44:35 +0000 Subject: [PATCH 179/221] corrected the goto program for String.valueOf for char arrays --- .../java_char_array_init/test_init.class | Bin 1081 -> 1209 bytes .../java_char_array_init/test_init.java | 7 ++-- src/goto-programs/pass_preprocess.cpp | 39 ++++++++++++------ src/goto-programs/pass_preprocess.h | 7 ++++ 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/regression/strings/java_char_array_init/test_init.class b/regression/strings/java_char_array_init/test_init.class index 7ac97bd0ddd7ab4eb0653d91bb462a2029bd71a9..be3baee56bd4f0a276d7b18454f832685f146dce 100644 GIT binary patch delta 710 zcmZ9K%}*0i6vclt?J%8TfObkhP>UZGp|nsfq89u>Q7l?D(HLW6qSZ85(v(OiZo72} znT>Q~TYDWL=Oj5#qGYq{$i1>YQ7>?*xlt>gtbd zIYCk(yjXo%%{Qveh5S8dx!zo`NH8T~TIamQ1up7bvY6qr#T8~{cGV(ATtO?<8jU53 zYs|UxN~);V8Wz_nS531s*?f-M3oXz5m6i6K=~jW zIUumhCxt8ya!BN&RVkr~2Y$JMK%u>kmh|;tv-_jK&MY1r|fFgp@>2yj9~9 zkaMHGH+m~3MI^y{pTO7f1=Kw?N-&w(d+jxQX01KD-fr^2x1V43fl(HGj?k|;<>N45 z!)cE}&iI^V$d>0U8n&qD5l~7pVvF;dvQOGxz2I|^ie_}{QK-i>RtexLj}4L(L7tO>P}hSX^0OeHGMR#l>zKvUIk@%Bz zi)1n3e#V<}xAB|gyWMQ6g=v!7BmHoPj<1LKw+FmccG}9*1W_tJ@FLA59r9BF3u5=K z7=9uyUP@1o^!DKV5+b2Ft~sG8$WpSA^CTz#jW^z&1F|`S7MUhG{+@X36aInX-&yUu PE>3#Z{)p~vJL>xlxyecode); - exprt lhs = function_call.arguments()[0]; - exprt arg = function_call.arguments()[1]; + exprt arg = function_call.arguments()[0]; auto location = function_call.source_location(); typet object_type = arg.type().subtype(); - pointer_typet tmp_void_star = pointer_typet(void_typet()); - tmp_void_star.set(ID_C_reference,true); - typet void_star_star=pointer_typet(); - void_star_star.move_to_subtypes(tmp_void_star); + exprt array_size = member_exprt(dereference_exprt(arg,object_type) + ,"length",signedbv_typet(32)); + exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", + pointer_typet(pointer_typet(unsignedbv_typet(16)))); + exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); + std::vector::iterator it = function_call.arguments().begin(); + *it = array_size; + function_call.arguments().insert(++it,data); + make_string_function(i_it,function_name); +} + +void pass_preprocesst::make_of_char_array_function_call +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + debug() << "function call " << function_call.pretty() << eom; + + exprt arg = function_call.arguments()[1]; + auto location = function_call.source_location(); + typet object_type = arg.type().subtype(); exprt array_size = member_exprt(dereference_exprt(arg,object_type) ,"length",signedbv_typet(32)); exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", @@ -275,8 +288,8 @@ void pass_preprocesst::make_of_char_array_function exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); std::vector::iterator it = function_call.arguments().begin(); - it++; *it = array_size; it++; - function_call.arguments().insert(it,data); + *(++it) = array_size; + function_call.arguments().insert(++it,data); make_string_function_call(i_it,function_name); } @@ -311,6 +324,8 @@ void pass_preprocesst::replace_string_calls else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) make_of_char_array_function(goto_program,i_it,string_of_char_array_functions[function_id]); + else if(string_of_char_array_function_calls.find(function_id) != string_of_char_array_function_calls.end()) + make_of_char_array_function_call(goto_program,i_it,string_of_char_array_function_calls[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); @@ -458,8 +473,8 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; + string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; + string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 880026d26fb..fdc6d83326d 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -27,6 +27,7 @@ class pass_preprocesst:public messaget std::map string_functions; std::map string_function_calls; std::map string_of_char_array_functions; + std::map string_of_char_array_function_calls; public: pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, @@ -58,6 +59,12 @@ class pass_preprocesst:public messaget void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); + // replace "r.some_function(arr,...)" by + // "r = function_name(arr.length,arr.data,...); + void make_of_char_array_function_call + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt); + // replace "r = some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function From 32824e252e300814ccd857833e5e257f8f1faa2c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 13:51:01 +0000 Subject: [PATCH 180/221] tests for String.valueOf --- regression/strings/java_char_array_init/test.desc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/regression/strings/java_char_array_init/test.desc b/regression/strings/java_char_array_init/test.desc index d6b3ef98fe1..102b24ceb72 100644 --- a/regression/strings/java_char_array_init/test.desc +++ b/regression/strings/java_char_array_init/test.desc @@ -6,5 +6,6 @@ test_init.class ^\[assertion.1\] assertion at file test_init.java line 16: SUCCESS$ ^\[assertion.2\] assertion at file test_init.java line 17: SUCCESS$ ^\[assertion.3\] assertion at file test_init.java line 18: SUCCESS$ -^\[assertion.4\] assertion at file test_init.java line 19: FAILURE$ +^\[assertion.4\] assertion at file test_init.java line 20: SUCCESS$ +^\[assertion.5\] assertion at file test_init.java line 21: FAILURE$ -- \ No newline at end of file From c2c33bf8a1ec2fa3f85ba5c554e82f29e406ba27 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 13:58:02 +0000 Subject: [PATCH 181/221] setting String.copyValueOf to be the same than valueOf --- src/goto-programs/pass_preprocess.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index b15d4de56f8..c88faae1f78 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -446,8 +446,6 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; - //string_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;)")] = cprover_string_value_of_func; - //string_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_value_of_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; @@ -477,6 +475,8 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; Forall_goto_functions(it, goto_functions) From 88fcf74122c08443016a920b9c270c159132b119 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 15:03:19 +0000 Subject: [PATCH 182/221] adding the StringBuilder.insert(I[C) function --- .../test_insert.class | Bin 0 -> 1049 bytes .../test_insert.java | 20 +++++++ src/goto-programs/pass_preprocess.cpp | 30 +++++++++-- src/goto-programs/pass_preprocess.h | 8 ++- .../string_constraint_generator.cpp | 51 ++++++++++++++---- .../refinement/string_constraint_generator.h | 3 ++ src/solvers/refinement/string_functions.h | 1 + 7 files changed, 97 insertions(+), 16 deletions(-) create mode 100644 regression/strings/java_string_builder_insert/test_insert.class create mode 100644 regression/strings/java_string_builder_insert/test_insert.java diff --git a/regression/strings/java_string_builder_insert/test_insert.class b/regression/strings/java_string_builder_insert/test_insert.class new file mode 100644 index 0000000000000000000000000000000000000000..69a32d7f93fa8cbebd4e1f6c84f79c41463bb3b1 GIT binary patch literal 1049 zcmZuwT~8B16g|_Aop!sWYg<1206|e&3RFcJe$32GBpy7GK^-ah27EI6Bv_zGGturXorfvE& z48ctHHAATAR0Ts~$+X2vy|yXbR}xGIHN&(Sx-uI}+r~#DZyEMhzT~^6y;YEf@se*; z-Y*+FO+3dqY38`k5Sgx6M^~sNr|wq7GgA`kzVQ6FrY&WSNlFbVq#3%;)6dsUt14WQ z+W*OMt*XRLXqdzU4G-~%V@g8-(;SaA%*c~VNHWA0g=IOd3eutB31%63+T?S`4SDLi z4zb5h>EW2uFpnasY!|%P+!hs|A+T{a-)aIwXXgK%QCc1u`ZCWqirEXGBYy>ImG2yr zr85_Sgg7Oq^x5-8jo!_vlc>%Xt?A@n(v$c^Ba9jqq?-EArWyE-1X=W+iuh1BEbpB9 zmeoR*<|EN=K+&Qhq7kSH&vZrgq=EGEew_|zg4QuWv#8VPGQCGW1nq(#8Awy?q_19D z8Li>reXws5h%SmsGszG|H+pCFMctXt)rA_Lc*@&N*C z$>2Uh%Ok;D1K~F#4Ja#n;G+#h_7L4gdNipv5ZguU0NUC<;=fO)zqHd*PM|4g5^>sx z>3W4Eaq<))4^fh)l7l#gC^Lox{h&Ig$mc3KeMgAPRFy#B5UU(lIIePB>!Q-$6Z;cQ kpFlE&js_CD;GwSw1-~QOzWlfsk}Qlsd{%a>uc__&KWVw%^#A|> literal 0 HcmV?d00001 diff --git a/regression/strings/java_string_builder_insert/test_insert.java b/regression/strings/java_string_builder_insert/test_insert.java new file mode 100644 index 00000000000..5c291b76fe5 --- /dev/null +++ b/regression/strings/java_string_builder_insert/test_insert.java @@ -0,0 +1,20 @@ +public class test_insert { + + public static void main(String[] argv) + { + char [] str = new char[5]; + str[0] = 'H'; + str[1] = 'e'; + str[2] = 'l'; + str[3] = 'l'; + str[4] = 'o'; + + + StringBuilder sb = new StringBuilder(" world"); + sb.insert(0,str); + String s = sb.toString(); + System.out.println(s); + assert(s.equals("Hello world")); + assert(!s.equals("Hello world")); + } +} diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index c88faae1f78..5afb88af22e 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -276,8 +276,6 @@ void pass_preprocesst::make_of_char_array_function_call (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); - debug() << "function call " << function_call.pretty() << eom; - exprt arg = function_call.arguments()[1]; auto location = function_call.source_location(); typet object_type = arg.type().subtype(); @@ -293,6 +291,25 @@ void pass_preprocesst::make_of_char_array_function_call make_string_function_call(i_it,function_name); } +void pass_preprocesst::make_of_char_array_side_effect +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + exprt arg = function_call.arguments()[2]; + auto location = function_call.source_location(); + typet object_type = arg.type().subtype(); + exprt array_size = member_exprt(dereference_exprt(arg,object_type) + ,"length",signedbv_typet(32)); + exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", + pointer_typet(pointer_typet(unsignedbv_typet(16)))); + exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); + + std::vector::iterator it = std::next(std::next(function_call.arguments().begin())); + *it = array_size; + function_call.arguments().insert(++it,data); + make_string_function_side_effect(goto_program,i_it,function_name); +} void pass_preprocesst::replace_string_calls @@ -326,10 +343,11 @@ void pass_preprocesst::replace_string_calls make_of_char_array_function(goto_program,i_it,string_of_char_array_functions[function_id]); else if(string_of_char_array_function_calls.find(function_id) != string_of_char_array_function_calls.end()) make_of_char_array_function_call(goto_program,i_it,string_of_char_array_function_calls[function_id]); + else if(side_effect_char_array_functions.find(function_id) != side_effect_char_array_functions.end()) + make_of_char_array_side_effect(goto_program,i_it,side_effect_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - - + } } else @@ -465,6 +483,10 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = cprover_string_insert_bool_func; side_effect_functions[irep_idt("java::java.lang.StringBuilder.setLength:(I)V")] = cprover_string_set_length_func; + + side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[CII)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_array_func; + side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[C)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_array_func; + string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index fdc6d83326d..c7a5e08cc0d 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -28,6 +28,7 @@ class pass_preprocesst:public messaget std::map string_function_calls; std::map string_of_char_array_functions; std::map string_of_char_array_function_calls; + std::map side_effect_char_array_functions; public: pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, @@ -50,7 +51,7 @@ class pass_preprocesst:public messaget void make_string_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = s.some_function(x,...)" by "s=function_name(s,x)" + // replace "r = s.some_function(x,...)" by "s=function_name(s,x,...)" // and add a correspondance from r to s in the string_builders map void make_string_function_side_effect (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, @@ -71,6 +72,11 @@ class pass_preprocesst:public messaget (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt); + // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" + // and add a correspondance from r to s in the string_builders map + void make_of_char_array_side_effect + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name); bool has_java_string_type(const exprt &expr); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index b88c3a08f79..b0e135adddc 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -248,6 +248,8 @@ exprt string_constraint_generatort::function_application return string_insert_double(expr); else if(starts_with(id,cprover_string_insert_float_func)) return string_insert_float(expr); + else if(starts_with(id,cprover_string_insert_char_array_func)) + return string_insert_char_array(expr); else if(starts_with(id,cprover_string_substring_func)) return string_substring(expr); else if(starts_with(id,cprover_string_trim_func)) @@ -1229,10 +1231,24 @@ exprt string_constraint_generatort::string_data } string_exprt string_constraint_generatort::of_char_array -(const function_application_exprt &f) +(const exprt & length, const exprt & data, const exprt & offset, const exprt & count) { string_exprt str(get_char_type()); + symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); + exprt char_in_tab = data; + assert(char_in_tab.id() == ID_index); + char_in_tab.op1() = plus_exprt(qvar,offset); + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); + axioms.push_back(eq.forall(qvar,count)); + axioms.emplace_back(equal_exprt(str.length(),count)); + + return str; +} + +string_exprt string_constraint_generatort::of_char_array +(const function_application_exprt &f) +{ exprt offset; exprt count; if(f.arguments().size() == 4) @@ -1246,20 +1262,33 @@ string_exprt string_constraint_generatort::of_char_array count = f.arguments()[0]; offset = constant_signed(0,32); } - exprt tab_length = f.arguments()[0]; exprt data = f.arguments()[1]; + return of_char_array(tab_length,data,offset,count); +} - symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); - exprt char_in_tab = data; - assert(char_in_tab.id() == ID_index); - char_in_tab.op1() = plus_exprt(qvar,offset); - - string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.forall(qvar,count)); - axioms.emplace_back(equal_exprt(str.length(),count)); +string_exprt string_constraint_generatort::string_insert_char_array +(const function_application_exprt &f) +{ + exprt offset; + exprt count; + if(f.arguments().size() == 6) + { + offset = f.arguments()[4]; + count = f.arguments()[5]; + } + else + { + assert(f.arguments().size() == 4); + count = f.arguments()[2]; + offset = constant_signed(0,32); + } - return str; + string_exprt str = string_of_expr(f.arguments()[0]); + exprt length = f.arguments()[2]; + exprt data = f.arguments()[3]; + string_exprt arr = of_char_array(length,data,offset,count); + return string_insert(str,arr,f.arguments()[1]); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 7d2962b9f63..c1ad1a2049c 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -108,6 +108,7 @@ class string_constraint_generatort { string_exprt string_insert_char(const function_application_exprt &f); string_exprt string_insert_double(const function_application_exprt &f); string_exprt string_insert_float(const function_application_exprt &f); + string_exprt string_insert_char_array(const function_application_exprt &f); exprt string_is_empty(const function_application_exprt &f); exprt string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); exprt string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); @@ -125,6 +126,8 @@ class string_constraint_generatort { string_exprt of_char(const function_application_exprt &f); string_exprt of_char(const exprt &i); string_exprt of_char_array(const function_application_exprt &f); + string_exprt of_char_array + (const exprt & length, const exprt & data, const exprt & offset, const exprt & count); // Warning: the specifications of these functions is only partial: string_exprt of_float(const function_application_exprt &f); diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 231b9f41b13..83786de2098 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -50,6 +50,7 @@ const irep_idt cprover_string_insert_bool_func("__CPROVER_uninterpreted_string_i const irep_idt cprover_string_insert_char_func("__CPROVER_uninterpreted_string_insert_char_func"); const irep_idt cprover_string_insert_float_func("__CPROVER_uninterpreted_string_insert_float_func"); const irep_idt cprover_string_insert_double_func("__CPROVER_uninterpreted_string_insert_double_func"); +const irep_idt cprover_string_insert_char_array_func("__CPROVER_uninterpreted_string_insert_char_array_func"); const irep_idt cprover_string_is_prefix_func("__CPROVER_uninterpreted_string_is_prefix_func"); const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_string_is_suffix_func"); const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_string_is_empty_func"); From 556de1161a4c88216d6c8a29d0bca0dd5c994a79 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 15:53:21 +0000 Subject: [PATCH 183/221] adding String.format to the goto program --- .../java_string_builder_insert/test.desc | 8 ++++ src/goto-programs/pass_preprocess.cpp | 38 ++++++++++++++++++- src/goto-programs/pass_preprocess.h | 9 +++++ 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 regression/strings/java_string_builder_insert/test.desc diff --git a/regression/strings/java_string_builder_insert/test.desc b/regression/strings/java_string_builder_insert/test.desc new file mode 100644 index 00000000000..1478418228f --- /dev/null +++ b/regression/strings/java_string_builder_insert/test.desc @@ -0,0 +1,8 @@ +CORE +test_insert.class +--pass +^EXIT=10$ +^SIGNAL=0$ +^\[assertion.1\] assertion at file test_init.java line 17: SUCCESS$ +^\[assertion.2\] assertion at file test_init.java line 18: FAILURE$ +-- diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 5afb88af22e..8b8d53fb9bc 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -311,6 +311,35 @@ void pass_preprocesst::make_of_char_array_side_effect make_string_function_side_effect(goto_program,i_it,function_name); } +void pass_preprocesst::make_format_function +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + exprt arg = function_call.arguments()[1]; + auto location = function_call.source_location(); + typet object_type = arg.type().subtype(); + debug() << "format of " << arg.pretty() << eom; + exprt array_size = member_exprt(dereference_exprt(arg,object_type) + ,"length",signedbv_typet(32)); + exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", + pointer_typet(pointer_typet(unsignedbv_typet(16)))); + exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); + + std::vector::iterator it = std::next(function_call.arguments().begin()); + *it = array_size; + function_call.arguments().insert(++it,data); + make_string_function(i_it,function_name); +} + +void pass_preprocesst::make_pointer +(goto_programt::instructionst::iterator & i_it) +{ + code_function_callt &function_call=to_code_function_call(i_it->code); + code_assignt assignment(function_call.lhs(), function_call.arguments()[0]); + assignment.add_source_location()=function_call.source_location(); + i_it->make_assignment(); + i_it->code=assignment; +} void pass_preprocesst::replace_string_calls (goto_functionst::function_mapt::iterator f_it) @@ -347,7 +376,10 @@ void pass_preprocesst::replace_string_calls make_of_char_array_side_effect(goto_program,i_it,side_effect_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - + else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) + make_format_function(goto_program,i_it,cprover_string_format_func); + else if(identity_functions.find(function_id) != identity_functions.end()) + make_pointer(i_it); } } else @@ -451,7 +483,6 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_functions[irep_idt("java::java.lang.String.charAt:(I)C")] = cprover_string_char_at_func; string_functions[irep_idt("java::java.lang.StringBuilder.charAt:(I)C")] = cprover_string_char_at_func; string_functions[irep_idt("java::java.lang.CharSequence.charAt:(I)C")] = cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")] = cprover_string_format_func; string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = cprover_string_copy_func; string_functions[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = cprover_string_of_float_func; @@ -501,6 +532,9 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; + identity_functions[irep_idt("java::java.lang.Integer.valueOf:(I)Ljava/lang/Integer;")] = true; + + Forall_goto_functions(it, goto_functions) { replace_string_calls(it); diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index c7a5e08cc0d..d45f9e1d705 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -29,6 +29,7 @@ class pass_preprocesst:public messaget std::map string_of_char_array_functions; std::map string_of_char_array_function_calls; std::map side_effect_char_array_functions; + std::map identity_functions; public: pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, @@ -78,6 +79,14 @@ class pass_preprocesst:public messaget (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name); + // replace "r = some_function(s,arr)" by "r=function_name(s,arr.length,arr.data)" + void make_format_function + (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, + irep_idt function_name); + + // replace "lhs=some_function(x,...)" by "lhs=x" + void make_identity_function(goto_programt::instructionst::iterator & i_it); + bool has_java_string_type(const exprt &expr); void replace_string_calls(goto_functionst::function_mapt::iterator f_it); From 51d0bc9d16ea23df2b6b7def12be88e76d5c3a87 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 31 Oct 2016 16:02:21 +0000 Subject: [PATCH 184/221] adding String.format to the goto program --- src/goto-programs/pass_preprocess.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index d45f9e1d705..a4c877da0db 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -84,8 +84,8 @@ class pass_preprocesst:public messaget (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "lhs=some_function(x,...)" by "lhs=x" - void make_identity_function(goto_programt::instructionst::iterator & i_it); + // replace "lhs=some_function(x,...)" by "lhs=&x" + void make_pointer(goto_programt::instructionst::iterator & i_it); bool has_java_string_type(const exprt &expr); From 24bbc4c9bb7b586a9804d0c7a0475c2eb8a724bb Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 1 Nov 2016 09:29:19 +0000 Subject: [PATCH 185/221] clearing a bit the make_to_char_array_function function in pass preprocessing --- src/goto-programs/pass_preprocess.cpp | 108 ++++++++------------------ 1 file changed, 33 insertions(+), 75 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 8b8d53fb9bc..6d83ec474de 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -107,19 +107,20 @@ void pass_preprocesst::make_to_char_array_function // replace "return_tmp0 = s.toCharArray()" with: // tmp_assign = MALLOC(struct java::array[reference], 17L); // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - // tmp_assign->data = MALLOC(void **, tmp_assign->length); + // tmp_assign->data = new (void **)[tmp_assign->length]; // tmp_nil = __CPROVER_uninterpreted_string_data_func(s, tmp_assign->data); // return_tmp0 = tmp_assign; code_function_callt &function_call=to_code_function_call(i_it->code); if(function_call.lhs().type().id()!=ID_pointer) - debug() << "the function call should return a pointer" << eom; + debug() << "pass_preprocesst::make_to_char_array_function: " + << "the function call should return a pointer" << eom; typet object_type = function_call.lhs().type().subtype(); exprt object_size = size_of_expr(object_type, ns); if(object_size.is_nil()) - debug() << "do_java_new got nil object_size" << eom; + debug() << "pass_preprocesst::make_to_char_array_function got nil object_size" << eom; auto location = function_call.source_location(); std::vector new_code; @@ -133,24 +134,8 @@ void pass_preprocesst::make_to_char_array_function exprt string_argument = replace_string_literals(function_call.arguments()[0]); typet string_argument_type = string_argument.type(); - auxiliary_symbolt tmp_assign_symbol; - tmp_assign_symbol.base_name="tmp_assign"; - tmp_assign_symbol.is_static_lifetime=false; - tmp_assign_symbol.mode=ID_java; - tmp_assign_symbol.name="tmp_assign"; - tmp_assign_symbol.type=pointer_typet(object_type); - symbol_table.add(tmp_assign_symbol); - - auxiliary_symbolt tmp_string_symbol; - tmp_string_symbol.base_name="tmp_string"; - tmp_string_symbol.is_static_lifetime=false; - tmp_string_symbol.mode=ID_java; - tmp_string_symbol.name="tmp_string"; - tmp_string_symbol.type=string_argument_type.subtype(); - symbol_table.add(tmp_string_symbol); - // tmp_assign = MALLOC(struct java::array[reference],sizeof(s)) - symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); + symbol_exprt tmp_assign = new_tmp_symbol("tmp_assign", pointer_typet(object_type)); code_assignt assign_malloc(tmp_assign, malloc_expr); new_code.push_back(assign_malloc); @@ -163,57 +148,23 @@ void pass_preprocesst::make_to_char_array_function call_to_length.function()=symbol_exprt(cprover_string_length_func); call_to_length.arguments().push_back(string_argument); - code_assignt assign_length(member_exprt(dereference_exprt(tmp_assign,object_type) - ,"length",signedbv_typet(32)), - typecast_exprt(call_to_length,signedbv_typet(32))); + const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); + dereference_exprt deref(tmp_assign, object_type); + member_exprt length(deref,struct_type.components()[1].get_name(), + struct_type.components()[1].type()); + code_assignt assign_length(length,typecast_exprt(call_to_length,signedbv_typet(32))); new_code.push_back(assign_length); - // tmp_malloc = MALLOC(length) - // tmp_assign->data = tmp_malloc - /* - side_effect_exprt malloc_expr_data(ID_malloc); - pointer_typet tmp_void_star = pointer_typet(void_typet()); - tmp_void_star.set(ID_C_reference,true); - typet void_star_star=pointer_typet(); - void_star_star.move_to_subtypes(tmp_void_star); - - malloc_expr_data.type()=pointer_typet(void_star_star); - exprt array_size = member_exprt(dereference_exprt(tmp_assign,object_type) - ,"length",signedbv_typet(32)); - malloc_expr_data.copy_to_operands(array_size); - malloc_expr_data.add_source_location()=location; - - auxiliary_symbolt tmp_malloc_symbol; - tmp_malloc_symbol.base_name="tmp_malloc"; - tmp_malloc_symbol.is_static_lifetime=false; - tmp_malloc_symbol.mode=ID_java; - tmp_malloc_symbol.name="tmp_malloc"; - tmp_malloc_symbol.type=void_star_star; - symbol_table.add(tmp_malloc_symbol); - - symbol_exprt tmp_malloc("tmp_malloc",void_star_star); - - exprt data_pointer = member_exprt(dereference_exprt(tmp_assign,object_type),"data", void_star_star); - new_code.push_back(code_assignt(tmp_malloc, malloc_expr_data)); - new_code.push_back(code_assignt(data_pointer, tmp_malloc)); - */ - + // tmp_assign->data = new data.type[length]; assert(ns.follow(object_type).id()==ID_struct); - const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); - dereference_exprt deref(tmp_assign, object_type); - member_exprt data(deref,struct_type.components()[2].get_name(), struct_type.components()[2].type()); - member_exprt length(deref,struct_type.components()[1].get_name(), struct_type.components()[1].type()); - //"length",signedbv_typet(32)); + member_exprt data(deref,struct_type.components()[2].get_name(), + struct_type.components()[2].type()); side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); data_cpp_new_expr.set(ID_size, length); - debug() << "data_cpp_new_expr : " << data_cpp_new_expr.pretty() << eom; - symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); - //new_code.push_back(code_assignt(tmp_data, data_cpp_new_expr)); new_code.push_back(code_assignt(data, data_cpp_new_expr)); - // tmp_assing->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); - + // tmp_assign->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); declare_function(cprover_string_data_func,void_typet()); function_application_exprt call_to_data; call_to_data.type()=void_typet(); @@ -223,20 +174,11 @@ void pass_preprocesst::make_to_char_array_function call_to_data.arguments().push_back(data); call_to_data.arguments().push_back(dereference_exprt(data)); - auxiliary_symbolt tmp_nil_symbol; - tmp_nil_symbol.base_name="tmp_nil"; - tmp_nil_symbol.is_static_lifetime=false; - tmp_nil_symbol.mode=ID_java; - tmp_nil_symbol.name="tmp_nil"; - tmp_nil_symbol.type=void_typet(); - symbol_table.add(tmp_nil_symbol); - - new_code.push_back(code_assignt(symbol_exprt("tmp_nil",void_typet()),call_to_data)); - + exprt tmp_nil = new_tmp_symbol("tmp_nil", void_typet()); + new_code.push_back(code_assignt(tmp_nil,call_to_data)); // return_tmp0 = tmp_assign new_code.push_back(code_assignt(function_call.lhs(), tmp_assign)); - // putting the assignements into the program for(int i=0; icode); + typet object_type = function_call.lhs().type().subtype(); + exprt object_size = size_of_expr(object_type, ns); + + if(object_size.is_nil()) + debug() << "pass_preprocesst::make_pointer got nil object_size" << eom; + + auto location = function_call.source_location(); + + side_effect_exprt malloc_expr(ID_malloc); + malloc_expr.copy_to_operands(object_size); + malloc_expr.type()=pointer_typet(object_type); + malloc_expr.add_source_location()=location; + + symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); + code_assignt assign_malloc(tmp_assign, malloc_expr); + code_assignt assignment(function_call.lhs(), function_call.arguments()[0]); - assignment.add_source_location()=function_call.source_location(); + assign_malloc.add_source_location() = location; i_it->make_assignment(); i_it->code=assignment; } From 894d50274715bcda49b72a5e055077eef7779383 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 1 Nov 2016 09:43:58 +0000 Subject: [PATCH 186/221] cleaning pass preprocess functions of useless arguments --- src/goto-programs/pass_preprocess.cpp | 38 ++++++++++++++------------- src/goto-programs/pass_preprocess.h | 16 +++++------ 2 files changed, 26 insertions(+), 28 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 6d83ec474de..55697851296 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -79,8 +79,7 @@ void pass_preprocesst::make_string_function_call } void pass_preprocesst::make_string_function_side_effect -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name) +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); code_typet function_type=to_code_type(function_call.function().type()); @@ -195,7 +194,7 @@ void pass_preprocesst::make_to_char_array_function void pass_preprocesst::make_of_char_array_function -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); exprt arg = function_call.arguments()[0]; @@ -215,7 +214,7 @@ void pass_preprocesst::make_of_char_array_function } void pass_preprocesst::make_of_char_array_function_call -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name) +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); exprt arg = function_call.arguments()[1]; @@ -234,8 +233,7 @@ void pass_preprocesst::make_of_char_array_function_call } void pass_preprocesst::make_of_char_array_side_effect -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name) +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); exprt arg = function_call.arguments()[2]; @@ -250,7 +248,7 @@ void pass_preprocesst::make_of_char_array_side_effect std::vector::iterator it = std::next(std::next(function_call.arguments().begin())); *it = array_size; function_call.arguments().insert(++it,data); - make_string_function_side_effect(goto_program,i_it,function_name); + make_string_function_side_effect(i_it,function_name); } void pass_preprocesst::make_format_function @@ -274,7 +272,7 @@ void pass_preprocesst::make_format_function } void pass_preprocesst::make_pointer -(goto_programt::instructionst::iterator & i_it) +(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { code_function_callt &function_call=to_code_function_call(i_it->code); typet object_type = function_call.lhs().type().subtype(); @@ -290,11 +288,16 @@ void pass_preprocesst::make_pointer malloc_expr.type()=pointer_typet(object_type); malloc_expr.add_source_location()=location; - symbol_exprt tmp_assign("tmp_assign",pointer_typet(object_type)); - code_assignt assign_malloc(tmp_assign, malloc_expr); - - code_assignt assignment(function_call.lhs(), function_call.arguments()[0]); + code_assignt assign_malloc(function_call.lhs(), malloc_expr); assign_malloc.add_source_location() = location; + + code_assignt assignment(dereference_exprt(function_call.lhs(),object_type), + function_call.arguments()[0]); + assignment.add_source_location() = location; + + i_it->make_assignment(); + i_it->code=assign_malloc; + i_it=goto_program.insert_after(i_it); i_it->make_assignment(); i_it->code=assignment; } @@ -322,22 +325,21 @@ void pass_preprocesst::replace_string_calls if(string_functions.find(function_id) != string_functions.end()) make_string_function(i_it,string_functions[function_id]); else if(side_effect_functions.find(function_id) != side_effect_functions.end()) - make_string_function_side_effect(goto_program, i_it,side_effect_functions[function_id]); + make_string_function_side_effect(i_it,side_effect_functions[function_id]); else if(string_function_calls.find(function_id) != string_function_calls.end()) make_string_function_call(i_it, string_function_calls[function_id]); - else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) - make_of_char_array_function(goto_program,i_it,string_of_char_array_functions[function_id]); + make_of_char_array_function(i_it,string_of_char_array_functions[function_id]); else if(string_of_char_array_function_calls.find(function_id) != string_of_char_array_function_calls.end()) - make_of_char_array_function_call(goto_program,i_it,string_of_char_array_function_calls[function_id]); + make_of_char_array_function_call(i_it,string_of_char_array_function_calls[function_id]); else if(side_effect_char_array_functions.find(function_id) != side_effect_char_array_functions.end()) - make_of_char_array_side_effect(goto_program,i_it,side_effect_char_array_functions[function_id]); + make_of_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) make_format_function(goto_program,i_it,cprover_string_format_func); else if(identity_functions.find(function_id) != identity_functions.end()) - make_pointer(i_it); + make_pointer(goto_program,i_it); } } else diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index a4c877da0db..5a79b7b1cac 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -55,8 +55,7 @@ class pass_preprocesst:public messaget // replace "r = s.some_function(x,...)" by "s=function_name(s,x,...)" // and add a correspondance from r to s in the string_builders map void make_string_function_side_effect - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name); + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); @@ -64,28 +63,25 @@ class pass_preprocesst:public messaget // replace "r.some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function_call - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt); + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); // replace "r = some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt); + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" // and add a correspondance from r to s in the string_builders map void make_of_char_array_side_effect - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name); + (goto_programt::instructionst::iterator & i_it, irep_idt function_name); // replace "r = some_function(s,arr)" by "r=function_name(s,arr.length,arr.data)" void make_format_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "lhs=some_function(x,...)" by "lhs=&x" - void make_pointer(goto_programt::instructionst::iterator & i_it); + // replace "lhs=some_function(x,...)" by "lhs=malloc(sizeof(x)); *lhs = x" + void make_pointer(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it); bool has_java_string_type(const exprt &expr); From aaf2b89634a4540e76e8881c709c04b3e4dfe551 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 1 Nov 2016 10:33:39 +0000 Subject: [PATCH 187/221] cleaning the code from codes for functions that are not yet supported --- src/goto-programs/pass_preprocess.cpp | 69 +----------- src/goto-programs/pass_preprocess.h | 19 ++-- src/solvers/refinement/string_refinement.cpp | 108 ------------------- src/solvers/refinement/string_refinement.h | 7 -- 4 files changed, 8 insertions(+), 195 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 55697851296..0e611956ddf 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -103,12 +103,6 @@ void pass_preprocesst::make_string_function_side_effect void pass_preprocesst::make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { - // replace "return_tmp0 = s.toCharArray()" with: - // tmp_assign = MALLOC(struct java::array[reference], 17L); - // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - // tmp_assign->data = new (void **)[tmp_assign->length]; - // tmp_nil = __CPROVER_uninterpreted_string_data_func(s, tmp_assign->data); - // return_tmp0 = tmp_assign; code_function_callt &function_call=to_code_function_call(i_it->code); if(function_call.lhs().type().id()!=ID_pointer) @@ -188,7 +182,6 @@ void pass_preprocesst::make_to_char_array_function i_it->source_location=location; if(icode); - exprt arg = function_call.arguments()[1]; - auto location = function_call.source_location(); - typet object_type = arg.type().subtype(); - debug() << "format of " << arg.pretty() << eom; - exprt array_size = member_exprt(dereference_exprt(arg,object_type) - ,"length",signedbv_typet(32)); - exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", - pointer_typet(pointer_typet(unsignedbv_typet(16)))); - exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); - - std::vector::iterator it = std::next(function_call.arguments().begin()); - *it = array_size; - function_call.arguments().insert(++it,data); - make_string_function(i_it,function_name); -} - -void pass_preprocesst::make_pointer -(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) -{ - code_function_callt &function_call=to_code_function_call(i_it->code); - typet object_type = function_call.lhs().type().subtype(); - exprt object_size = size_of_expr(object_type, ns); - - if(object_size.is_nil()) - debug() << "pass_preprocesst::make_pointer got nil object_size" << eom; - - auto location = function_call.source_location(); - - side_effect_exprt malloc_expr(ID_malloc); - malloc_expr.copy_to_operands(object_size); - malloc_expr.type()=pointer_typet(object_type); - malloc_expr.add_source_location()=location; - - code_assignt assign_malloc(function_call.lhs(), malloc_expr); - assign_malloc.add_source_location() = location; - - code_assignt assignment(dereference_exprt(function_call.lhs(),object_type), - function_call.arguments()[0]); - assignment.add_source_location() = location; - - i_it->make_assignment(); - i_it->code=assign_malloc; - i_it=goto_program.insert_after(i_it); - i_it->make_assignment(); - i_it->code=assignment; -} void pass_preprocesst::replace_string_calls (goto_functionst::function_mapt::iterator f_it) @@ -336,10 +279,6 @@ void pass_preprocesst::replace_string_calls make_of_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - else if(function_id == irep_idt("java::java.lang.String.format:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;")) - make_format_function(goto_program,i_it,cprover_string_format_func); - else if(identity_functions.find(function_id) != identity_functions.end()) - make_pointer(goto_program,i_it); } } else @@ -491,14 +430,8 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; - - identity_functions[irep_idt("java::java.lang.Integer.valueOf:(I)Ljava/lang/Integer;")] = true; - - Forall_goto_functions(it, goto_functions) - { replace_string_calls(it); - } -} + } diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 5a79b7b1cac..5812c05a3eb 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -14,7 +14,6 @@ Date: September 2016 #include #include -//#include "goto_convert_class.h" class pass_preprocesst:public messaget { @@ -29,11 +28,9 @@ class pass_preprocesst:public messaget std::map string_of_char_array_functions; std::map string_of_char_array_function_calls; std::map side_effect_char_array_functions; - std::map identity_functions; public: - pass_preprocesst(symbol_tablet &, goto_functionst &, //const namespacet &, - message_handlert &); + pass_preprocesst(symbol_tablet &, goto_functionst &, message_handlert &); private: @@ -57,6 +54,12 @@ class pass_preprocesst:public messaget void make_string_function_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); + // replace "return_tmp0 = s.toCharArray()" with: + // tmp_assign = MALLOC(struct java::array[reference], 17L); + // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); + // tmp_assign->data = new (void **)[tmp_assign->length]; + // tmp_nil = __CPROVER_uninterpreted_string_data_func(s, tmp_assign->data); + // return_tmp0 = tmp_assign; void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); @@ -75,14 +78,6 @@ class pass_preprocesst:public messaget void make_of_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = some_function(s,arr)" by "r=function_name(s,arr.length,arr.data)" - void make_format_function - (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it, - irep_idt function_name); - - // replace "lhs=some_function(x,...)" by "lhs=malloc(sizeof(x)); *lhs = x" - void make_pointer(goto_programt & goto_program, goto_programt::instructionst::iterator & i_it); - bool has_java_string_type(const exprt &expr); void replace_string_calls(goto_functionst::function_mapt::iterator f_it); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index ef3623f38aa..22f9c807f70 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -91,66 +91,10 @@ literalt string_refinementt::convert_rest(const exprt &expr) } else { - //debug() << "string_refinementt::convert_rest("<< pretty_short(expr) << ")" << eom; return SUB::convert_rest(expr); } } -bvt string_refinementt::convert_pointer_type(const exprt &expr) -{ - /* - if(expr.id()==ID_function_application) - { - assert(false); // can this occur? - bvt bv = convert_function_application(to_function_application_expr(expr)); - return bv; - } - else { - if(expr.id()==ID_typecast) - { - assert(false); // can this occur? - if(expr.operands().size()!=1) - throw "typecast takes one operand"; - - const exprt &op=expr.op0(); - const typet &op_type=ns.follow(op.type()); - - if(op_type.id()==ID_pointer) - return convert_pointer_type(op); - else if(op_type.id()==ID_signedbv || - op_type.id()==ID_unsignedbv) - { - debug() << "string_refinementt::convert_pointer_type("<< pretty_short(expr) << ")" << eom; - debug() << "details:"<< op.pretty() << ")" << eom; - return convert_bv(typecast_exprt(op,unsignedbv_typet(64))); - } - } - else - */ - { - return SUB::convert_pointer_type(expr); - } - //} -} - - /* - -bvt string_refinementt::convert_member(const member_exprt &expr) -{ - //debug() << "string_refinementt::convert_member( " << expr.pretty() << ");" << eom; - - // DOES NOT SEEM TO BE USEFULL - std::map::iterator it = generator.member_substitutions.find(expr); - if(it!=generator.member_substitutions.end()) - { - debug() << "substituting : " << expr.pretty() << eom << "for : " - << it->second.pretty() << eom; - return SUB::convert_bv(it->second); - } - else - return SUB::convert_member(expr); -}*/ - bvt string_refinementt::convert_symbol(const exprt &expr) { const typet &type = expr.type(); @@ -164,21 +108,6 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt bv = convert_bv(str); return bv; } - /* - else if (expr.type() == generator.get_char_type()) - { - bvt bv; - bv.resize(generator.get_char_width()); - map.get_literals(identifier, generator.get_char_type(), generator.get_char_width(), bv); - - forall_literals(it, bv) - if(it->var_no()>=prop.no_variables() && !it->is_constant()) - { - error() << identifier << eom; - assert(false); - } - return bv; - } */ else return SUB::convert_symbol(expr); } @@ -210,16 +139,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) generator.string_of_expr(sym,expr.rhs()); return false; } - /* - else if(type == generator.get_char_type()) - { - const bvt &bv1=convert_bv(expr.rhs()); - symbol_exprt sym = to_symbol_expr(expr.lhs()); - const irep_idt &identifier = sym.get_identifier(); - map.set_literals(identifier, generator.get_char_type(), bv1); - if(freeze_all) set_frozen(bv1); - return false; - } */ else if(type==ns.follow(expr.rhs().type())) { if(is_unbounded_array(type)) return true; @@ -245,9 +164,6 @@ void string_refinementt::print_time(std::string s) << eom; } -void string_refinementt::post_process() -{ SUB::post_process(); } - decision_proceduret::resultt string_refinementt::dec_solve() { @@ -551,30 +467,6 @@ bool string_refinementt::check_axioms() } -// Gets the upper bounds that are applied to [qvar], in the expression [expr] -/* Shouldn't be necessary with the new way string constraints are encoded -void get_bounds(const exprt &qvar, const exprt &expr, std::vector & out) - { - std::vector to_treat; - to_treat.push_back(expr); - while(!to_treat.empty()) { - exprt e = to_treat.back(); - to_treat.pop_back(); - if (e.id() == ID_lt && e.op0() == qvar) { - assert(e.op1().type() == index_type || e.op1().type() == integer_typet()); - out.push_back(minus_exprt(e.op1(), refined_string_typet::index_of_int(1))); - } else if (e.id() == ID_le && e.op0() == qvar) { - out.push_back(e.op1()); - } else { - forall_operands(it, e) { - to_treat.push_back(*it); - } - } - } - } -*/ - - std::map< exprt, int> string_refinementt::map_of_sum(const exprt &f) { // number of time the element should be added (can be negative) std::map< exprt, int> elems; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 3c997c1a607..6af8c53c122 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -46,13 +46,10 @@ class string_refinementt: public bv_refinementt typedef std::set expr_sett; - virtual void post_process(); virtual bvt convert_symbol(const exprt &expr); virtual bvt convert_function_application (const function_application_exprt &expr); - virtual bvt convert_pointer_type(const exprt &expr); - decision_proceduret::resultt dec_solve(); // fills as many 0 as necessary in the bit vectors to have the right width @@ -63,10 +60,6 @@ class string_refinementt: public bv_refinementt string_constraint_generatort generator; - // Tells if a char value is in the high-surrogates or low surrogates ranges - exprt is_high_surrogate(const exprt & chr); - exprt is_low_surrogate(const exprt & chr); - // Simple constraints that have been given to the solver expr_sett seen_instances; // From 3764761357815c94a7b737ee70334d8768edadf9 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 1 Nov 2016 10:41:20 +0000 Subject: [PATCH 188/221] cleaning the code from format functions which are not yet working --- .../string_constraint_generator.cpp | 232 ++++-------------- .../refinement/string_constraint_generator.h | 1 - 2 files changed, 41 insertions(+), 192 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index b0e135adddc..d5e919cafed 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -131,11 +131,14 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) axioms.emplace_back(expr.cond(),res.same_length(t)); symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); - axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar])).forall(qvar,t.length())); + axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar]) + ).forall(qvar,t.length())); axioms.emplace_back(not_exprt(expr.cond()),res.same_length(f)); symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); - axioms.push_back(string_constraintt(not_exprt(expr.cond()),equal_exprt(res[qvar2],f[qvar2])).forall(qvar2,f.length())); + axioms.push_back(string_constraintt(not_exprt(expr.cond()), + equal_exprt(res[qvar2],f[qvar2]) + ).forall(qvar2,f.length())); return res; } @@ -152,19 +155,7 @@ string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exp } string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & sym) -{ - if(refined_string_typet::is_java_string_type(sym.type()) - && starts_with(std::string(sym.get(ID_identifier).c_str()),"java::java.lang.String.Literal.")) - { - assert(false); // is this branch used ? - string_exprt s; - s = string_constant(string_exprt::extract_java_string(sym),JAVA_STRING_SOLVER_CHAR_WIDTH,refined_string_typet::java_char_type()); - return s; - } - else { - return get_string_of_symbol(sym); - } -} +{ return get_string_of_symbol(sym); } exprt string_constraint_generatort::function_application @@ -290,8 +281,6 @@ exprt string_constraint_generatort::function_application return string_delete_char_at(expr); else if(starts_with(id,cprover_string_replace_func)) return string_replace(expr); - else if(starts_with(id,cprover_string_format_func)) - return string_format(expr); else if(starts_with(id,cprover_string_data_func)) return string_data(expr); else @@ -316,17 +305,10 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch std::string str = sval.c_str(); // should only do this for java std::wstring utf16 = utf8_to_utf16le(str); - // warning: endianness should be used as a flag when using this function for (std::size_t i = 0; i < utf16.size(); ++i) { std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); constant_exprt idx(idx_binary, refined_string_typet::index_type()); - // warning: this should disappear if utf8_to_utf16 takes into account endianness - /* - wchar_t big_endian = ((utf16[i] << 8) & 0xFF00) | (utf16[i] >> 8); - - std::string sval_binary=integer2binary((unsigned)big_endian, char_width); - */ std::string sval_binary=integer2binary((unsigned)utf16[i], char_width); constant_exprt c(sval_binary,char_type); equal_exprt lemma(res[idx], c); @@ -362,25 +344,28 @@ string_exprt string_constraint_generatort::string_literal(const function_applica if (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) { - // C string constant + arg.op0().op0().op0().id() == ID_string_constant) + { + // C string constant - const exprt &s = arg.op0().op0().op0(); - sval = to_string_constant(s).get_value(); - char_width = STRING_SOLVER_CHAR_WIDTH; - char_type = refined_string_typet::char_type(); - - } else { - // Java string constant - assert (arg.operands().size() == 1); - assert(refined_string_typet::is_unrefined_string_type(arg.type())); - const exprt &s = arg.op0(); - - //it seems the value of the string is lost, we need to recover it from the identifier - sval = extract_java_string(to_symbol_expr(s)); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; - char_type = refined_string_typet::java_char_type(); - } + const exprt &s = arg.op0().op0().op0(); + sval = to_string_constant(s).get_value(); + char_width = STRING_SOLVER_CHAR_WIDTH; + char_type = refined_string_typet::char_type(); + + } + else + { + // Java string constant + assert (arg.operands().size() == 1); + assert(refined_string_typet::is_unrefined_string_type(arg.type())); + const exprt &s = arg.op0(); + + //it seems the value of the string is lost, we need to recover it from the identifier + sval = extract_java_string(to_symbol_expr(s)); + char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + char_type = refined_string_typet::java_char_type(); + } return string_constant(sval,char_width,char_type); } @@ -677,58 +662,12 @@ string_exprt string_constraint_generatort::of_float ).forall(qvar_zero,zero_string.length())); return string_concat(sign_string,magnitude); - - /* - ieee_floatt milli(fspec); - milli.from_float(0.001); - ieee_floatt decamega(fspec); - decamega.from_float(1e7); - exprt scientific = or_exprt - (float_bvt().relation(f,float_bvt().LT,milli.to_expr(),fspec), - float_bvt().relation(f,float_bvt().GE,decamega.to_expr(),fspec)); - */ - - // If m is greater than or equal to 10^-3 but less than 10^7, then it is represented as the integer part of m, in decimal form with no leading zeroes, followed by '.' ('\u002E'), followed by one or more decimal digits representing the fractional part of m. - - //string_exprt integer_part(char_type); - //exprt integer = float_bvt().to_integer(float_bvt.abs(f,fspec),32,true,fspec); - - //integer_part.of_int(integer); - //string_exprt dot_string(char_type); - //dot_string.of_string_constant(".",char_width,char_type,axioms); - - //string_exprt fractional_part(char_type); - - /* Here is the remainder of the specification of Float.toString, for the magnitude m : - - If m is less than 10^-3 or greater than or equal to 10^7, then it is represented in so-called "computerized scientific notation." Let n be the unique integer such that 10n ≤ m < 10n+1; then let a be the mathematically exact quotient of m and 10n so that 1 ≤ a < 10. The magnitude is then represented as the integer part of a, as a single decimal digit, followed by '.' ('\u002E'), followed by decimal digits representing the fractional part of a, followed by the letter 'E' ('\u0045'), followed by a representation of n as a decimal integer, as produced by the method Integer.toString(int). - - How many digits must be printed for the fractional part of m or a? There must be at least one digit to represent the fractional part, and beyond that as many, but only as many, more digits as are needed to uniquely distinguish the argument value from adjacent values of type float. That is, suppose that x is the exact mathematical value represented by the decimal representation produced by this method for a finite nonzero argument f. Then f must be the float value nearest to x; or, if two float values are equally close to x, then f must be one of them and the least significant bit of the significand of f must be 0. */ - - /* - exprt char_0 = constant_of_nat(48,char_width,char_type); - exprt char_9 = constant_of_nat(57,char_width,char_type); - exprt char_dot = constant_of_nat(46,char_width,char_type); - - symbol_exprt idx = fresh_symbol("QA_float",refined_string_typet::index_type()); - exprt c = (*this)[idx]; - exprt is_digit = - or_exprt(and_exprt(binary_relation_exprt(char_0,ID_le,c), - binary_relation_exprt(c,ID_le,char_9)), - equal_exprt(c,char_dot) - ); - string_constraintt a(is_digit);*/ - //axioms.push_back(a.forall(idx,index_zero,length())); } - - string_exprt string_constraint_generatort::of_bool (const function_application_exprt &f) -{ - return of_bool(args(f,1)[0]); -} +{ return of_bool(args(f,1)[0]); } string_exprt string_constraint_generatort::of_bool(const exprt &i) @@ -937,8 +876,6 @@ string_exprt string_constraint_generatort::string_char_set { string_exprt res(get_char_type()); string_exprt str = string_of_expr(args(f,3)[0]); - //symbol_exprt c = fresh_symbol("char", refined_string_typet::get_char_type(args[0])); - //axioms.emplace_back(equal_exprt(c,args(f,3)[2])); with_exprt sarrnew(str.content(), args(f,3)[1], args(f,3)[2]); implies_exprt lemma(binary_relation_exprt(args(f,3)[1], ID_lt, str.length()), and_exprt(equal_exprt(res.content(), sarrnew), @@ -1445,19 +1382,20 @@ exprt string_constraint_generatort::string_hash_code(const function_application_ // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) // WARNING: the specification may be incomplete - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { - symbol_exprt i = fresh_exist_index("index_hash"); - axioms.emplace_back - (or_exprt - (equal_exprt(hash[it->second],hash[str]), - or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), - and_exprt - (not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str.strictly_longer(i),is_positive(i)) + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + { + symbol_exprt i = fresh_exist_index("index_hash"); + axioms.emplace_back + (or_exprt + (equal_exprt(hash[it->second],hash[str]), + or_exprt + (not_exprt(equal_exprt(it->second.length(),str.length())), + and_exprt(equal_exprt(it->second.length(),str.length()), + and_exprt + (not_exprt(equal_exprt(str[i],it->second[i])), + and_exprt(str.strictly_longer(i),is_positive(i)) ))))); - } + } return hash[str]; } @@ -1891,73 +1829,6 @@ symbol_exprt string_constraint_generatort::string_intern(const function_applicat return pool[str]; } -// #include for debugging - -string_exprt string_constraint_generatort::string_format(const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - unsignedbv_typet char_type = get_char_type(); - - if(args.size() == 2) - { - // Warning: this is not very clean: - irep_idt literal = extract_java_string(to_symbol_expr(args[0].op1().op0().op0())); - std::string format_string = id2string(literal); - //std::cout << "string_exprt::of_string_format " << format_string << std::endl; - size_t position = format_string.find_first_of('%'); - std::vector strings; - int arg_counter = 0; - - string_exprt begin = string_constant(format_string.substr(0,position),get_char_width(),char_type); - strings.push_back(begin); - //std::cout << "string_exprt::of_string_format : " << f.pretty() << std::endl; - //typecast_exprt arg_tab(member_exprt(args[1].op0(),"data"),array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - member_exprt arg_tab(args[1].op0(),"data",array_typet(java_type_from_string("Ljava/lang/Object;"),infinity_exprt(refined_string_typet::index_type()))); - //std::cout << "string_exprt::arg_tab : " << arg_tab.type().pretty() << std::endl; - - while(position != std::string::npos) - { - switch(format_string[position+1]) { - case 'd' : - { - index_exprt arg_object(arg_tab,refined_string_typet::index_of_int(arg_counter++)); - typecast_exprt arg_int(arg_object, signedbv_typet(32)); - symbol_exprt var_arg_int = string_exprt::fresh_symbol("format_arg_int", signedbv_typet(32)); - axioms.push_back(equal_exprt(arg_int,var_arg_int)); - axioms.push_back(equal_exprt(var_arg_int,refined_string_typet::index_of_int(12))); - string_exprt str = of_int(var_arg_int,10); - strings.push_back(str); - // std::cout << "string format: position " << position << " int arg: " << arg_int.pretty() << std::endl; - break; - } - - default: - { - //std::cout << "warning: unknown string format: " << format_string << std::endl; - break; - } - } - size_t new_position = format_string.find_first_of('%',position+2); - if(new_position != std::string::npos) { - string_exprt str = string_constant(format_string.substr(position+2,new_position), - get_char_width(),char_type); - strings.push_back(str); - } - position = new_position; - } - - string_exprt * concatenation = &strings[0]; - unsigned i; - for(i = 1; i < strings.size() - 1; i++) - { - string_exprt str = string_concat(*concatenation,strings[i]); - concatenation = &str; - } - - return string_concat(*concatenation,strings[i]); - } - else assert(false); -} void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, const exprt & str) { @@ -1967,24 +1838,3 @@ void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, cons assign_to_symbol(sym,string_of_expr(str)); } -/* - -string_exprt string_constraint_generator::string_of_expr(const exprt & str) -{ - //debug() << "string_constraint_generatort::string_of_expr of " << pretty_short(str) << eom; - if(str.id()==ID_symbol) - return string_of_symbol(to_symbol_expr(str)); - else - if (str.id() == ID_function_application && - starts_with(to_symbol_expr(to_function_application_expr(str).function()).get_identifier(),cprover_string_intern_func)) { - symbol_exprt sym1 = string_intern(to_function_application_expr(str)); - string_exprt s(refined_string_typet::java_char_type()); - assign_to_symbol(sym1,s); - return s; - } - else - return string_exprt::of_expr(str,symbol_to_string,axioms); -} -*/ - - diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index c1ad1a2049c..cb42863f2dc 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -89,7 +89,6 @@ class string_constraint_generatort { string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); string_exprt string_delete(const function_application_exprt &expr); string_exprt string_delete_char_at(const function_application_exprt &expr); - string_exprt string_format(const function_application_exprt &f); exprt string_hash_code(const function_application_exprt &f); // Warning: the specifications are only partial for some of the "index_of" functions From 0aefe607e2369c409adb4159cfd9207013a9fc0e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 1 Nov 2016 10:51:35 +0000 Subject: [PATCH 189/221] removing tests which are in the wrong directory --- .../strings/java_char_array/test_init.class | Bin 1024 -> 0 bytes .../strings/java_char_array/test_init.java | 19 ------------------ 2 files changed, 19 deletions(-) delete mode 100644 regression/strings/java_char_array/test_init.class delete mode 100644 regression/strings/java_char_array/test_init.java diff --git a/regression/strings/java_char_array/test_init.class b/regression/strings/java_char_array/test_init.class deleted file mode 100644 index 50ad0294c1566b6ac92ed2e488217cd2b52bffc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 zcmZvbTTc@~6vzM5c6Zuk+pb(HsE8;^VUa2qFSH_9HIRUs)M|hSv$PXj-0tG;*2G8s z7`*uCvzU}bjK2FZ{2;_L%N@xkb2;aK&Ybg`*+08KegPOqS%ZN-jw>2s=uhD)u4x#+ zb-BGESA!{JkWXSrT824H4Q=R?n-Pwi8b(pzxW&*hUVhG=V7ua3v#~1tmr_iQhGn}9x%|q)y7j>-IF`FssD!@lt`%iq zx)NHocZ=3Wr02LzRWl?@HD^D+R`HsCO+2+_woE93@Qw70%4|A1(8*w&&MfU?9OF7B zFv)R8$6eghaUWB1Rn&0~?F`DCa2!uZ2@e>$k8;c&wEV>PJzvK(9x|j3Pv)4>F^fkh z&V9bRE@~k|Y^6+z^DAZ9+wr28O+_ms+bQ$x+JU=gw*MiXU!{D_oJ!gi>dlc`RmJ^&3?6p%IB0=^DOxdB= zKzCUef$fX>At$=Rut^Sj3d`uHmu1i^WJb5dOshDkGj!6}MY~>_8O_S@HrO{QM2nmd^e=@bX#Q+yKa~YDZp>B9gdwV?VmMV(l>;}t>JDN{<~HJsrZO?Tg~Uh; z%HE{5z_*axMCV9*ss(KmZ98aN+J^pn-`s*~XkY#_OLh8~TGknh>YSqXsCfERXyC{q zNv);OL%YlL6AeO#i8RJYS0ZnPV5}2}PlTd}A~T5ZqQY^3<08xDDEiVNn#qU((B6Se f3)xNZ#8)KZ-;q2z|A3Rsr687`ku-aw@-F`aS6t7O diff --git a/regression/strings/java_char_array/test_init.java b/regression/strings/java_char_array/test_init.java deleted file mode 100644 index 44e29648670..00000000000 --- a/regression/strings/java_char_array/test_init.java +++ /dev/null @@ -1,19 +0,0 @@ -public class test_init { - - public static void main(String[] argv) - { - char [] str = new char[10]; - str[0] = 'H'; - str[1] = 'e'; - str[2] = 'l'; - str[3] = 'l'; - str[4] = 'o'; - String s = new String(str); - char c = str[2]; - System.out.println(s); - System.out.println(s.length()); - assert(s.startsWith("Hello")); - assert(s.length() == 10); - assert(s.equals("Hello")); - } -} From 0c6021503c71c5e4fa560143d9b6a41b517b0bb8 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 11 Nov 2016 08:49:12 +0000 Subject: [PATCH 190/221] unimportant spacing changes --- src/solvers/refinement/string_refinement.cpp | 1 - src/solvers/refinement/string_refinement.h | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 22f9c807f70..a3a1cb6be0c 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -242,7 +242,6 @@ decision_proceduret::resultt string_refinementt::dec_solve() return res; } - } debug () << "string_refinementt::dec_solve reached the maximum number of steps allowed"; return D_ERROR; diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 6af8c53c122..ecd21143b2c 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -43,7 +43,7 @@ class string_refinementt: public bv_refinementt protected: - + typedef std::set expr_sett; virtual bvt convert_symbol(const exprt &expr); From e35d93af30d8c36eec75168f76c62dfb951582c0 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 21 Nov 2016 14:56:26 +0000 Subject: [PATCH 191/221] small cleaning --- src/solvers/refinement/string_expr.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index f6c2299c012..263f06a6838 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -8,14 +8,11 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ #include -//#include -//#include -exprt index_zero = refined_string_typet::index_zero(); unsigned string_exprt::next_symbol_id = 1; -symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, - const typet &tp) +symbol_exprt string_exprt::fresh_symbol +(const irep_idt &prefix, const typet &tp) { std::ostringstream buf; buf << "string_refinement#" << prefix << "#" << (next_symbol_id++); @@ -24,11 +21,8 @@ symbol_exprt string_exprt::fresh_symbol(const irep_idt &prefix, return symbol_exprt(name, tp); } -constant_exprt constant_of_nat(int i,int width, typet t) { - return constant_exprt(integer2binary(i,width), t); -} - -string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(refined_string_typet(char_type)) +string_exprt::string_exprt(unsignedbv_typet char_type) + : struct_exprt(refined_string_typet(char_type)) { refined_string_typet t(char_type); symbol_exprt length = fresh_symbol("string_length",refined_string_typet::index_type()); From f36b5e2e82f52a8ff9ab5897f951ea5f978cf288 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 2 Dec 2016 16:03:09 +0000 Subject: [PATCH 192/221] Adapting regression test to the actual output of cbmc --- regression/strings/test3/test.desc | 8 ++++---- regression/strings/test_pass_pc3/test.desc | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 6cacec86a19..a6895e71aea 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s) == i + 5: SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"po\"), s): SUCCESS$ -^\[main.assertion.3\] assertion __CPROVER_uninterpreted_string_char_at_func(s, i) == __CPROVER_uninterpreted_char_literal_func(\"p\"): SUCCESS$ -^\[main.assertion.4\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"p!o\"), s): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_length(s) == i + 5: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"po\"),s): SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_char_at(s, i) == __CPROVER_char_literal(\"p\"): SUCCESS$ +^\[main.assertion.4\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"p!o\"), s): FAILURE$ -- diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index b4c45aee0ee..cdb59e59302 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s3) == 0: FAILURE$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_length_func(s3) < 2: SUCCESS$ +^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s3) < 2: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_length_func(s3) == 0: FAILURE$ ^VERIFICATION FAILED$ From bb7ae0e66dc7beb507a85285e87c281f7049d5aa Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 11 Nov 2016 09:13:50 +0000 Subject: [PATCH 193/221] Changes to the push request as suggested by Michael --- src/cbmc/cbmc_parse_options.cpp | 10 +++------- src/cbmc/cbmc_solvers.h | 5 ++--- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 0ac16a59fec..3fe79c0a197 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -342,11 +342,6 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("refine-arithmetic", true); } - if(cmdline.isset("pass")) - { - options.set_option("pass", true); - } - if(cmdline.isset("max-node-refinement")) options.set_option("max-node-refinement", cmdline.get_value("max-node-refinement")); @@ -918,7 +913,8 @@ bool cbmc_parse_optionst::process_goto_program( goto_partial_inline(goto_functions, ns, ui_message_handler); - if(cmdline.isset("pass")) { + if(cmdline.isset("pass")) + { status() << "PASS Preprocessing " << eom; pass_preprocess(symbol_table, goto_functions); } @@ -1187,7 +1183,7 @@ void cbmc_parse_optionst::help() " --yices use Yices\n" " --z3 use Z3\n" " --refine use refinement procedure (experimental)\n" - " --pass use pass procedure (experimental)\n" + " --pass use parameterized array for string solving (experimental)\n" " --outfile filename output formula to given file\n" " --arrays-uf-never never turn arrays into uninterpreted functions\n" " --arrays-uf-always always turn arrays into uninterpreted functions\n" diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index cc4a48dcb30..4d094819fad 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -79,14 +79,13 @@ class cbmc_solverst:public messaget virtual std::unique_ptr get_solver() { solvert *solver; + if(options.get_bool_option("dimacs")) solver = get_dimacs(); else if(options.get_bool_option("refine")) solver = get_bv_refinement(); - else if(options.get_bool_option("pass")) { - std::cout << "PASS solver" << std::endl; + else if(options.get_bool_option("pass")) solver = get_string_refinement(); - } else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); else if(options.get_bool_option("smt2")) From 4119d1ce08f9e0fd66f8dd47833e81009ab6979b Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 11 Nov 2016 14:59:54 +0000 Subject: [PATCH 194/221] setting pass option necessary to select the right solver --- src/cbmc/cbmc_parse_options.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 3fe79c0a197..402a3235385 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -459,6 +459,8 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) if(cmdline.isset("graphml-cex")) options.set_option("graphml-cex", cmdline.get_value("graphml-cex")); + + options.set_option("pass", cmdline.isset("pass")); } /*******************************************************************\ From 3513290c6a6be12dca4897356afd899deca3a89c Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 6 Dec 2016 14:37:14 +0000 Subject: [PATCH 195/221] Adapting regression test to CBMC ouput --- regression/strings/test_char_set/test.desc | 4 ++-- regression/strings/test_concat/test.desc | 4 ++-- regression/strings/test_equal/test.desc | 4 ++-- regression/strings/test_int/test.desc | 6 +++--- regression/strings/test_pass_pc3/test.desc | 4 ++-- regression/strings/test_substring/test.desc | 8 ++++---- regression/strings/test_suffix/test.desc | 4 ++-- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc index 8cf42dda8f3..0445499cd88 100644 --- a/regression/strings/test_char_set/test.desc +++ b/regression/strings/test_char_set/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func("apc")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func("abc")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_equal(t, __CPROVER_string_literal("apc")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_string_equal(t, __CPROVER_string_literal("abc")): FAILURE$ -- diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index e5d8b30d6da..499e1fe9e46 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion c == __CPROVER_uninterpreted_char_literal_func(\"p\"): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_char_at_func(u, 2) == __CPROVER_uninterpreted_char_literal_func(\"p\"): FAILURE$ +^\[main.assertion.1\] assertion c == __CPROVER_char_literal("p"): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_char_at(u,2) == __CPROVER_char_literal("p"): FAILURE$ -- diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index 81ad6913856..7e5b17c8994 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal_func(\"pippo\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(s, __CPROVER_uninterpreted_string_literal_func(\"mippo\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_equal(s, __CPROVER_string_literal("pippo")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_string_equal(s, __CPROVER_string_literal("mippo")): FAILURE$ -- diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc index e46e43ed936..25a6a7ff59b 100644 --- a/regression/strings/test_int/test.desc +++ b/regression/strings/test_int/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_char_at_func(s, 0) == .1.: SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_char_at_func(s, 1) == .2.: SUCCESS$ +^\[main.assertion.1\] assertion __CPROVER_char_at(s,0) == .1.: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_char_at(s,1) == .2.: SUCCESS$ ^\[main.assertion.3\] assertion j == 234: SUCCESS$ -^\[main.assertion.4\] assertion j < 233 || __CPROVER_uninterpreted_string_char_at_func(s, 2) == .4.: FAILURE$ +^\[main.assertion.4\] assertion j < 233 || __CPROVER_char_at(s,2) == .4.: FAILURE$ -- diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index cdb59e59302..b8d49988f50 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -3,7 +3,7 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_length_func(s3) < 2: SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_length_func(s3) == 0: FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_length(s3) == 0: FAILURE$ +^\[main.assertion.2\] assertion __CPROVER_string_length(s3) < 2: SUCCESS$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc index 6fe9134b59d..da28fb44155 100644 --- a/regression/strings/test_substring/test.desc +++ b/regression/strings/test_substring/test.desc @@ -3,8 +3,8 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cd\")): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cc\")): FAILURE$ -^\[main.assertion.3\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"bc\")): SUCCESS$ -^\[main.assertion.4\] assertion !__CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"cd\")): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_equal(t,__CPROVER_string_literal("cd")): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_string_equal(t,__CPROVER_string_literal("cc")): FAILURE$ +^\[main.assertion.3\] assertion !__CPROVER_string_equal(t,__CPROVER_string_literal("bc")): SUCCESS$ +^\[main.assertion.4\] assertion !__CPROVER_string_equal(t,__CPROVER_string_literal("cd")): FAILURE$ -- \ No newline at end of file diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc index e0e8af7704c..7c4823e9eb8 100644 --- a/regression/strings/test_suffix/test.desc +++ b/regression/strings/test_suffix/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"po\"), s): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_uninterpreted_string_is_suffix_func(__CPROVER_uninterpreted_string_literal_func(\"pp\"), s): FAILURE$ +^\[main.assertion.1\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal("po"),s): SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal("pp"),s): FAILURE$ -- From 0c5b1c80761dd5c6ac52bb8c2aa7b19f64f837c5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 8 Dec 2016 11:42:02 +0000 Subject: [PATCH 196/221] Deleted trailing whitespaces --- .../java_char_array/test_char_array.java | 4 +- .../java_char_array_init/test_init.java | 4 +- .../test_insert.java | 4 +- src/cbmc/cbmc_parse_options.cpp | 12 +- src/cbmc/cbmc_solvers.h | 2 +- src/goto-programs/pass_preprocess.cpp | 58 ++-- src/goto-programs/pass_preprocess.h | 14 +- src/goto-programs/remove_returns.cpp | 4 +- src/solvers/flattening/boolbv_with.cpp | 3 - src/solvers/refinement/bv_refinement.h | 2 +- .../refinement/refined_string_type.cpp | 7 +- src/solvers/refinement/refined_string_type.h | 12 +- src/solvers/refinement/string_constraint.cpp | 10 +- src/solvers/refinement/string_constraint.h | 16 +- .../string_constraint_generator.cpp | 276 +++++++++--------- .../refinement/string_constraint_generator.h | 24 +- src/solvers/refinement/string_expr.h | 28 +- src/solvers/refinement/string_refinement.cpp | 162 +++++----- src/solvers/refinement/string_refinement.h | 20 +- 19 files changed, 328 insertions(+), 334 deletions(-) diff --git a/regression/strings/java_char_array/test_char_array.java b/regression/strings/java_char_array/test_char_array.java index 22ff962f2df..428dc9210cf 100644 --- a/regression/strings/java_char_array/test_char_array.java +++ b/regression/strings/java_char_array/test_char_array.java @@ -1,6 +1,6 @@ public class test_char_array { - - public static void main(String[] argv) + + public static void main(String[] argv) { String s = "abc"; char [] str = s.toCharArray(); diff --git a/regression/strings/java_char_array_init/test_init.java b/regression/strings/java_char_array_init/test_init.java index 3f6b6e3a640..5f4e220844c 100644 --- a/regression/strings/java_char_array_init/test_init.java +++ b/regression/strings/java_char_array_init/test_init.java @@ -1,6 +1,6 @@ public class test_init { - - public static void main(String[] argv) + + public static void main(String[] argv) { char [] str = new char[10]; str[0] = 'H'; diff --git a/regression/strings/java_string_builder_insert/test_insert.java b/regression/strings/java_string_builder_insert/test_insert.java index 5c291b76fe5..1fac897c5ed 100644 --- a/regression/strings/java_string_builder_insert/test_insert.java +++ b/regression/strings/java_string_builder_insert/test_insert.java @@ -1,6 +1,6 @@ public class test_insert { - - public static void main(String[] argv) + + public static void main(String[] argv) { char [] str = new char[5]; str[0] = 'H'; diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 84755d94080..21f93d1593f 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -116,13 +116,13 @@ void cbmc_parse_optionst::eval_verbosity() { // this is our default verbosity unsigned int v=messaget::M_STATISTICS; - + if(cmdline.isset("verbosity")) { v=unsafe_string2unsigned(cmdline.get_value("verbosity")); if(v>10) v=10; } - + ui_message_handler.set_verbosity(v); } @@ -143,7 +143,7 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) if(config.set(cmdline)) { usage_error(); - exit(1); + exit(1); // should contemplate EX_USAGE from sysexits.h } if(cmdline.isset("program-only")) @@ -153,7 +153,7 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("show-vcc", true); if(cmdline.isset("cover")) - options.set_option("cover", cmdline.get_value("cover")); + options.set_option("cover", cmdline.get_values("cover")); if(cmdline.isset("mm")) options.set_option("mm", cmdline.get_value("mm")); @@ -918,9 +918,9 @@ bool cbmc_parse_optionst::process_goto_program( // do partial inlining status() << "Partial Inlining" << eom; goto_partial_inline(goto_functions, ns, ui_message_handler); - - if(cmdline.isset("pass")) + + if(cmdline.isset("pass")) { status() << "PASS Preprocessing " << eom; pass_preprocesst(symbol_table, goto_functions, ui_message_handler); diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index 2198c243ebd..0096f140ffe 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -85,7 +85,7 @@ class cbmc_solverst:public messaget else if(options.get_bool_option("refine")) solver = get_bv_refinement(); else if(options.get_bool_option("pass")) - solver = get_string_refinement(); + solver = get_string_refinement(); else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); else if(options.get_bool_option("smt2")) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 0e611956ddf..3f9d9e9e709 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -43,7 +43,7 @@ void pass_preprocesst::declare_function(irep_idt function_name, const typet &typ } void pass_preprocesst::make_string_function -(goto_programt::instructionst::iterator & i_it, irep_idt function_name) +(goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); code_typet function_type=to_code_type(function_call.function().type()); @@ -92,9 +92,9 @@ void pass_preprocesst::make_string_function_side_effect for(unsigned i = 0; i < function_call.arguments().size(); i++) rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); code_assignt assignment(function_call.arguments()[0], rhs); - + // add a mapping from the left hand side to the first argument - string_builders[function_call.lhs()]=function_call.arguments()[0]; + string_builders[function_call.lhs()]=function_call.arguments()[0]; assignment.add_source_location()=function_call.source_location(); i_it->make_assignment(); i_it->code=assignment; @@ -106,7 +106,7 @@ void pass_preprocesst::make_to_char_array_function code_function_callt &function_call=to_code_function_call(i_it->code); if(function_call.lhs().type().id()!=ID_pointer) - debug() << "pass_preprocesst::make_to_char_array_function: " + debug() << "pass_preprocesst::make_to_char_array_function: " << "the function call should return a pointer" << eom; typet object_type = function_call.lhs().type().subtype(); @@ -143,14 +143,14 @@ void pass_preprocesst::make_to_char_array_function const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); dereference_exprt deref(tmp_assign, object_type); - member_exprt length(deref,struct_type.components()[1].get_name(), + member_exprt length(deref,struct_type.components()[1].get_name(), struct_type.components()[1].type()); code_assignt assign_length(length,typecast_exprt(call_to_length,signedbv_typet(32))); new_code.push_back(assign_length); // tmp_assign->data = new data.type[length]; assert(ns.follow(object_type).id()==ID_struct); - member_exprt data(deref,struct_type.components()[2].get_name(), + member_exprt data(deref,struct_type.components()[2].get_name(), struct_type.components()[2].type()); side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); data_cpp_new_expr.set(ID_size, length); @@ -166,7 +166,7 @@ void pass_preprocesst::make_to_char_array_function call_to_data.arguments().push_back(string_argument); call_to_data.arguments().push_back(data); call_to_data.arguments().push_back(dereference_exprt(data)); - + exprt tmp_nil = new_tmp_symbol("tmp_nil", void_typet()); new_code.push_back(code_assignt(tmp_nil,call_to_data)); @@ -174,7 +174,7 @@ void pass_preprocesst::make_to_char_array_function new_code.push_back(code_assignt(function_call.lhs(), tmp_assign)); // putting the assignements into the program - for(int i=0; imake_assignment(); @@ -201,7 +201,7 @@ void pass_preprocesst::make_of_char_array_function exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); std::vector::iterator it = function_call.arguments().begin(); - *it = array_size; + *it = array_size; function_call.arguments().insert(++it,data); make_string_function(i_it,function_name); } @@ -220,7 +220,7 @@ void pass_preprocesst::make_of_char_array_function_call exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); std::vector::iterator it = function_call.arguments().begin(); - *(++it) = array_size; + *(++it) = array_size; function_call.arguments().insert(++it,data); make_string_function_call(i_it,function_name); } @@ -239,7 +239,7 @@ void pass_preprocesst::make_of_char_array_side_effect exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); std::vector::iterator it = std::next(std::next(function_call.arguments().begin())); - *it = array_size; + *it = array_size; function_call.arguments().insert(++it,data); make_string_function_side_effect(i_it,function_name); } @@ -249,27 +249,27 @@ void pass_preprocesst::replace_string_calls (goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; - - Forall_goto_program_instructions(i_it, goto_program) - { - if(i_it->is_function_call()) + + Forall_goto_program_instructions(i_it, goto_program) + { + if(i_it->is_function_call()) { - + code_function_callt &function_call=to_code_function_call(i_it->code); for(unsigned i = 0; i < function_call.arguments().size(); i++) if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; - + if(function_call.function().id()==ID_symbol) { const irep_idt function_id= to_symbol_expr(function_call.function()).get_identifier(); - + if(string_functions.find(function_id) != string_functions.end()) make_string_function(i_it,string_functions[function_id]); - else if(side_effect_functions.find(function_id) != side_effect_functions.end()) + else if(side_effect_functions.find(function_id) != side_effect_functions.end()) make_string_function_side_effect(i_it,side_effect_functions[function_id]); - else if(string_function_calls.find(function_id) != string_function_calls.end()) + else if(string_function_calls.find(function_id) != string_function_calls.end()) make_string_function_call(i_it, string_function_calls[function_id]); else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) make_of_char_array_function(i_it,string_of_char_array_functions[function_id]); @@ -277,13 +277,13 @@ void pass_preprocesst::replace_string_calls make_of_char_array_function_call(i_it,string_of_char_array_function_calls[function_id]); else if(side_effect_char_array_functions.find(function_id) != side_effect_char_array_functions.end()) make_of_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); - else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) + else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); - } - } + } + } else { - if(i_it->is_assign()) + if(i_it->is_assign()) { code_assignt assignment = to_code_assign(i_it->code); exprt new_rhs = replace_string_literals(assignment.rhs()); @@ -310,11 +310,11 @@ bool pass_preprocesst::has_java_string_type(const exprt &expr) } else return false; } -exprt pass_preprocesst::replace_string_literals(const exprt & expr) +exprt pass_preprocesst::replace_string_literals(const exprt & expr) { - if(has_java_string_type(expr) ) + if(has_java_string_type(expr) ) { - if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) + if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) { std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); if(id.substr(0,31) == "java::java.lang.String.Literal.") @@ -422,7 +422,7 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; - + string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; @@ -433,5 +433,3 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function Forall_goto_functions(it, goto_functions) replace_string_calls(it); } - - diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 5812c05a3eb..c9df31d55ce 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -15,7 +15,7 @@ Date: September 2016 #include #include -class pass_preprocesst:public messaget +class pass_preprocesst:public messaget { private: namespacet ns; @@ -31,7 +31,7 @@ class pass_preprocesst:public messaget public: pass_preprocesst(symbol_tablet &, goto_functionst &, message_handlert &); - + private: // add a temporary symbol to the symbol table @@ -49,7 +49,7 @@ class pass_preprocesst:public messaget void make_string_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = s.some_function(x,...)" by "s=function_name(s,x,...)" + // replace "r = s.some_function(x,...)" by "s=function_name(s,x,...)" // and add a correspondance from r to s in the string_builders map void make_string_function_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); @@ -63,17 +63,17 @@ class pass_preprocesst:public messaget void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); - // replace "r.some_function(arr,...)" by + // replace "r.some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = some_function(arr,...)" by + // replace "r = some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); void make_of_char_array_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" + // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" // and add a correspondance from r to s in the string_builders map void make_of_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); @@ -81,7 +81,7 @@ class pass_preprocesst:public messaget bool has_java_string_type(const exprt &expr); void replace_string_calls(goto_functionst::function_mapt::iterator f_it); - + }; #endif diff --git a/src/goto-programs/remove_returns.cpp b/src/goto-programs/remove_returns.cpp index 2fe0b869209..11d2c234011 100644 --- a/src/goto-programs/remove_returns.cpp +++ b/src/goto-programs/remove_returns.cpp @@ -73,14 +73,14 @@ void remove_returnst::replace_returns( symbol_tablet::symbolst::iterator s_it= symbol_table.symbols.find(function_id); - if(s_it==symbol_table.symbols.end()) + if(s_it==symbol_table.symbols.end()) { std::string str = "function symbol for "; str += function_id.c_str(); str += " not found"; throw str; } - + assert(s_it!=symbol_table.symbols.end()); symbolt &function_symbol=s_it->second; diff --git a/src/solvers/flattening/boolbv_with.cpp b/src/solvers/flattening/boolbv_with.cpp index 549e35065bf..50ac35813f0 100644 --- a/src/solvers/flattening/boolbv_with.cpp +++ b/src/solvers/flattening/boolbv_with.cpp @@ -287,9 +287,6 @@ void boolbvt::convert_with_struct( if(!base_type_eq(subtype, op2.type(), ns)) { error().source_location=type.source_location(); - error() << "solvers/flattening/boolbv_with.cpp:" << eom; - error() << "expected gobal type = " << type.pretty() << eom; - error() << "op2 = " << op2.pretty() << eom; error() << "with/struct: component `" << component_name << "' type does not match: " << subtype.pretty() << " vs. " diff --git a/src/solvers/refinement/bv_refinement.h b/src/solvers/refinement/bv_refinement.h index cef726a2daf..cc69d541dd2 100644 --- a/src/solvers/refinement/bv_refinement.h +++ b/src/solvers/refinement/bv_refinement.h @@ -82,7 +82,7 @@ class bv_refinementt:public bv_pointerst void initialize(approximationt &approximation); void get_values(approximationt &approximation); bool is_in_conflict(approximationt &approximation); - + virtual void check_SAT(); virtual void check_UNSAT(); bool progress; diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp index 8f739ea2520..a8de366ffe5 100644 --- a/src/solvers/refinement/refined_string_type.cpp +++ b/src/solvers/refinement/refined_string_type.cpp @@ -44,7 +44,7 @@ bool refined_string_typet::is_java_deref_string_type(const typet &type) if(type.id() == ID_struct) { irep_idt tag = to_struct_type(type).get_tag(); return (tag == irep_idt("java.lang.String")); - } + } else return false; } @@ -56,7 +56,7 @@ bool refined_string_typet::is_java_string_builder_type(const typet &type) if(subtype.id() == ID_struct) { irep_idt tag = to_struct_type(subtype).get_tag(); return (tag == irep_idt("java.lang.StringBuilder")); - } + } else return false; } else return false; } @@ -69,8 +69,7 @@ bool refined_string_typet::is_java_char_sequence_type(const typet &type) if(subtype.id() == ID_struct) { irep_idt tag = to_struct_type(subtype).get_tag(); return (tag == irep_idt("java.lang.CharSequence")); - } + } else return false; } else return false; } - diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index 3226587d912..f4fb0c59f74 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -23,7 +23,7 @@ class refined_string_typet : public struct_typet { refined_string_typet(unsignedbv_typet char_type); // Type for the content (list of characters) of a string - inline array_typet get_content_type() + inline array_typet get_content_type() { return to_array_type((to_struct_type(*this)).components()[1].type());} // Types used in this refinement @@ -35,7 +35,7 @@ class refined_string_typet : public struct_typet { static inline exprt index_zero() { return constant_exprt(integer2binary(0, STRING_SOLVER_INDEX_WIDTH), index_type());} - // For C the unrefined string type is __CPROVER_string, for java it is a + // For C the unrefined string type is __CPROVER_string, for java it is a // pointer to a strict with tag java.lang.String static bool is_c_string_type(const typet & type); @@ -54,8 +54,8 @@ class refined_string_typet : public struct_typet { } static inline bool is_unrefined_string_type(const typet & type) - { return (is_c_string_type(type) - || is_java_string_type(type) + { return (is_c_string_type(type) + || is_java_string_type(type) || is_java_string_builder_type(type) || is_java_char_sequence_type(type) ); } @@ -63,8 +63,8 @@ class refined_string_typet : public struct_typet { static inline bool is_unrefined_string(const exprt & expr) { return (is_unrefined_string_type(expr.type())); } - static inline constant_exprt index_of_int(int i) - { return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), + static inline constant_exprt index_of_int(int i) + { return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), index_type()); } }; diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index dbba21d805c..d39c49cb006 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -14,7 +14,7 @@ exprt string_constraintt::premise() const { if(form == SIMPLE || form == UNIV_QUANT) { if(id() == ID_implies) return op0(); - else + else return true_exprt(); } else { @@ -46,10 +46,10 @@ string_constraintt string_constraintt::forall(const symbol_exprt & univ, const e return forall(univ,refined_string_typet::index_zero(),bound_sup); } -string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, - exprt premise, exprt exists_bound_inf, +string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, + exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1) -{ +{ string_constraintt sc(premise); sc.form = NOT_CONTAINS; sc.bounds.push_back(univ_bound_inf); @@ -66,7 +66,7 @@ string_constraintt string_constraintt::exists(const symbol_exprt & exist, const { assert(is_simple() || is_string_constant()); return string_constraintt - (and_exprt(*this, + (and_exprt(*this, and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), binary_relation_exprt(exist, ID_lt, bound_sup)))); } diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 49bc79335ae..0c4f2d2853c 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -14,11 +14,11 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -class string_constraintt : public exprt +class string_constraintt : public exprt { private: // String axioms can have 4 different forms: - // either a simple expression p, + // either a simple expression p, // or a string constant: forall x in [0,|s|[. s(x) = c(x) // or universally quantified expression: forall x in [lb,ub[. p(x) // or a expression for non containment: @@ -33,7 +33,7 @@ class string_constraintt : public exprt // Only for NOT_CONTAINS constraints (represent s1 and s2) std::vector compared_strings; - + // we should change the structure of the class to adopt the notations of chapter 7 // exprt index_guard; @@ -62,16 +62,16 @@ class string_constraintt : public exprt string_constraintt exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); // Default bound inferior is 0 string_constraintt exists(const symbol_exprt & exist, const exprt & bound_sup); - + static string_constraintt not_contains - (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, + (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1); bool is_simple() const { return (form == SIMPLE); }; bool is_string_constant() const { return (form == STRING_CONSTANT); }; bool is_univ_quant() const { return (form == UNIV_QUANT); }; bool is_not_contains() const { return (form == NOT_CONTAINS); }; - + exprt premise() const; exprt body() const; @@ -83,7 +83,7 @@ class string_constraintt : public exprt inline symbol_exprt get_univ_var() const { assert(form==UNIV_QUANT); return quantified_variable;} inline exprt univ_bound_inf() const { return bounds[0]; } inline exprt univ_bound_sup() const { return bounds[1]; } - inline exprt univ_within_bounds() const + inline exprt univ_within_bounds() const { return and_exprt(binary_relation_exprt(bounds[0],ID_le,get_univ_var()), binary_relation_exprt(bounds[1],ID_gt,get_univ_var())); } inline exprt exists_bound_inf() const { return bounds[2]; } @@ -107,7 +107,7 @@ class string_constraintt : public exprt assert(form == SIMPLE); return string_constraintt(not_exprt(*this)); } - + }; diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index d5e919cafed..d154f58a290 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -16,7 +16,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com constant_exprt string_constraint_generatort::constant_char(int i) { - switch(language) + switch(language) { case C : return constant_exprt(integer2binary(i,STRING_SOLVER_CHAR_WIDTH),refined_string_typet::char_type()); @@ -34,7 +34,7 @@ constant_exprt string_constraint_generatort::constant_unsigned(int i, size_t wid constant_exprt string_constraint_generatort::constant_signed(int i, size_t width) { return constant_exprt(integer2binary(i,width),signedbv_typet(width)); } -void string_constraint_generatort::check_char_type(const exprt & str) +void string_constraint_generatort::check_char_type(const exprt & str) { if(language == C) assert(refined_string_typet::is_c_string_type(str.type())); @@ -50,7 +50,7 @@ void string_constraint_generatort::check_char_type(const exprt & str) } unsignedbv_typet string_constraint_generatort::get_char_type() -{ +{ if(language==C) return refined_string_typet::char_type(); else if(language==JAVA) return refined_string_typet::java_char_type(); @@ -58,7 +58,7 @@ unsignedbv_typet string_constraint_generatort::get_char_type() } size_t string_constraint_generatort::get_char_width() -{ +{ if(language==C) return STRING_SOLVER_CHAR_WIDTH; else if(language==JAVA) return JAVA_STRING_SOLVER_CHAR_WIDTH; @@ -88,7 +88,7 @@ symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix) string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) { string_exprt s; - + check_char_type(unrefined_string); if(unrefined_string.id() == ID_function_application) @@ -97,21 +97,21 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine assert(res.type() == refined_string_typet(get_char_type())); s = to_string_expr(res); } - else if(unrefined_string.id()==ID_symbol) + else if(unrefined_string.id()==ID_symbol) s = get_string_of_symbol(to_symbol_expr(unrefined_string)); else if(unrefined_string.id()==ID_address_of) { assert(unrefined_string.op0().id()==ID_symbol); s = get_string_of_symbol(to_symbol_expr(unrefined_string.op0())); } - else if(unrefined_string.id()==ID_if) + else if(unrefined_string.id()==ID_if) s = string_if(to_if_expr(unrefined_string)); else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { // We ignore non deterministic symbols and struct } else { - throw ("string_exprt of:\n" + unrefined_string.pretty() + throw ("string_exprt of:\n" + unrefined_string.pretty() + "\nwhich is not a function application, a symbol or an if expression"); } @@ -133,7 +133,7 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar]) ).forall(qvar,t.length())); - + axioms.emplace_back(not_exprt(expr.cond()),res.same_length(f)); symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); axioms.push_back(string_constraintt(not_exprt(expr.cond()), @@ -143,7 +143,7 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) } -string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exprt & sym) +string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exprt & sym) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); @@ -155,7 +155,7 @@ string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exp } string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & sym) -{ return get_string_of_symbol(sym); } +{ return get_string_of_symbol(sym); } exprt string_constraint_generatort::function_application @@ -165,47 +165,47 @@ exprt string_constraint_generatort::function_application assert(name.id() == ID_symbol); const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (starts_with(id,cprover_char_literal_func)) + if (starts_with(id,cprover_char_literal_func)) return char_literal(expr); - else if (starts_with(id,cprover_string_length_func)) + else if (starts_with(id,cprover_string_length_func)) return string_length(expr); - else if (starts_with(id,cprover_string_equal_func)) + else if (starts_with(id,cprover_string_equal_func)) return string_equal(expr); - else if (starts_with(id,cprover_string_equals_ignore_case_func)) + else if (starts_with(id,cprover_string_equals_ignore_case_func)) return string_equals_ignore_case(expr); - else if (starts_with(id,cprover_string_is_empty_func)) + else if (starts_with(id,cprover_string_is_empty_func)) return string_is_empty(expr); - else if (starts_with(id,cprover_string_char_at_func)) + else if (starts_with(id,cprover_string_char_at_func)) return string_char_at(expr); - else if (starts_with(id,cprover_string_is_prefix_func)) + else if (starts_with(id,cprover_string_is_prefix_func)) return string_is_prefix(expr); - else if (starts_with(id,cprover_string_is_suffix_func)) + else if (starts_with(id,cprover_string_is_suffix_func)) return string_is_suffix(expr); - else if (starts_with(id,cprover_string_startswith_func)) + else if (starts_with(id,cprover_string_startswith_func)) return string_is_prefix(expr,true); - else if (starts_with(id,cprover_string_endswith_func)) + else if (starts_with(id,cprover_string_endswith_func)) return string_is_suffix(expr,true); - else if (starts_with(id,cprover_string_contains_func)) + else if (starts_with(id,cprover_string_contains_func)) return string_contains(expr); - else if (starts_with(id,cprover_string_hash_code_func)) + else if (starts_with(id,cprover_string_hash_code_func)) return string_hash_code(expr); - else if (starts_with(id,cprover_string_index_of_func)) + else if (starts_with(id,cprover_string_index_of_func)) return string_index_of(expr); - else if (starts_with(id,cprover_string_last_index_of_func)) + else if (starts_with(id,cprover_string_last_index_of_func)) return string_last_index_of(expr); - else if (starts_with(id,cprover_string_parse_int_func)) + else if (starts_with(id,cprover_string_parse_int_func)) return string_parse_int(expr); - else if (starts_with(id,cprover_string_to_char_array_func)) + else if (starts_with(id,cprover_string_to_char_array_func)) return string_to_char_array(expr); - else if (starts_with(id,cprover_string_code_point_at_func)) + else if (starts_with(id,cprover_string_code_point_at_func)) return string_code_point_at(expr); - else if (starts_with(id,cprover_string_code_point_before_func)) + else if (starts_with(id,cprover_string_code_point_before_func)) return string_code_point_before(expr); - else if (starts_with(id,cprover_string_code_point_count_func)) + else if (starts_with(id,cprover_string_code_point_count_func)) return string_code_point_count(expr); - else if (starts_with(id,cprover_string_offset_by_code_point_func)) + else if (starts_with(id,cprover_string_offset_by_code_point_func)) return string_offset_by_code_point(expr); - else if (starts_with(id,cprover_string_compare_to_func)) + else if (starts_with(id,cprover_string_compare_to_func)) return string_compare_to(expr); else if(starts_with(id,cprover_string_literal_func)) return string_literal(expr); @@ -305,7 +305,7 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch std::string str = sval.c_str(); // should only do this for java std::wstring utf16 = utf8_to_utf16le(str); - + for (std::size_t i = 0; i < utf16.size(); ++i) { std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); constant_exprt idx(idx_binary, refined_string_typet::index_type()); @@ -314,17 +314,17 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch equal_exprt lemma(res[idx], c); axioms.emplace_back(lemma,true); } - + std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); axioms.emplace_back(res.has_length(s_length)); return res; } - + string_exprt string_constraint_generatort::empty_string(const function_application_exprt &f) { - assert(f.arguments().size() == 0); + assert(f.arguments().size() == 0); string_exprt res(get_char_type()); axioms.emplace_back(res.has_length(0)); return res; @@ -337,30 +337,30 @@ string_exprt string_constraint_generatort::string_literal(const function_applica const exprt &arg = args[0]; - irep_idt sval; + irep_idt sval; int char_width; unsignedbv_typet char_type; - + if (arg.operands().size() == 1 && arg.op0().operands().size() == 1 && arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) + arg.op0().op0().op0().id() == ID_string_constant) { // C string constant - + const exprt &s = arg.op0().op0().op0(); sval = to_string_constant(s).get_value(); char_width = STRING_SOLVER_CHAR_WIDTH; char_type = refined_string_typet::char_type(); - - } + + } else { // Java string constant - assert (arg.operands().size() == 1); + assert (arg.operands().size() == 1); assert(refined_string_typet::is_unrefined_string_type(arg.type())); const exprt &s = arg.op0(); - + //it seems the value of the string is lost, we need to recover it from the identifier sval = extract_java_string(to_symbol_expr(s)); char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; @@ -396,8 +396,8 @@ string_exprt string_constraint_generatort::string_concat(const string_exprt & s1 string_exprt string_constraint_generatort::string_concat(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - + assert(args.size() == 2); + string_exprt s1 = string_of_expr(args[0]); string_exprt s2 = string_of_expr(args[1]); @@ -412,7 +412,7 @@ string_exprt string_constraint_generatort::string_copy(const function_applicatio axioms.emplace_back(res.same_length(s1)); symbol_exprt idx = fresh_univ_index("QA_index_copy"); string_constraintt a1(equal_exprt(s1[idx],res[idx])); - axioms.push_back(a1.forall(idx, s1.length())); + axioms.push_back(a1.forall(idx, s1.length())); return res; } @@ -422,7 +422,7 @@ string_exprt string_constraint_generatort::string_set_length(const function_appl exprt k = args(f,2)[1]; string_exprt res(get_char_type()); - // |s| = k + // |s| = k // && forall i < k. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) axioms.emplace_back(res.has_length(k)); @@ -430,7 +430,7 @@ string_exprt string_constraint_generatort::string_set_length(const function_appl string_constraintt a1 (and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); - axioms.push_back(a1.forall(idx, k)); + axioms.push_back(a1.forall(idx, k)); return res; } @@ -446,7 +446,7 @@ string_exprt string_constraint_generatort::java_char_array(const exprt & char_ar res.op1() = cont; return res; } - + string_exprt string_constraint_generatort::string_value_of(const function_application_exprt &f) { @@ -622,7 +622,7 @@ string_exprt string_constraint_generatort::of_float string_exprt nan_string = string_constant("NaN",char_width,char_type); ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); - + exprt isnan = float_bvt().isnan(f,fspec); axioms.emplace_back(isnan, magnitude.same_length(nan_string)); symbol_exprt qvar = fresh_univ_index("QA_equal_nan"); @@ -630,19 +630,19 @@ string_exprt string_constraint_generatort::of_float (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) ).forall(qvar,nan_string.length())); - // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. + // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. const bitvector_typet &bv_type=to_bitvector_type(f.type()); unsigned width=bv_type.get_width(); exprt isneg = extractbit_exprt(f, width-1); axioms.emplace_back(isneg, sign_string.has_length(1)); - + axioms.emplace_back(not_exprt(isneg), sign_string.has_length(0)); axioms.emplace_back(isneg,equal_exprt(sign_string[0], constant_char(0x2D))); // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". - + string_exprt infinity_string = string_constant("Infinity",char_width,char_type); exprt isinf = float_bvt().isinf(f,fspec); axioms.emplace_back(isinf, magnitude.same_length(infinity_string)); @@ -677,7 +677,7 @@ string_exprt string_constraint_generatort::of_bool(const exprt &i) string_exprt res(char_type); assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); - + typecast_exprt eq(i,bool_typet()); string_exprt true_string = string_constant("true",char_width,char_type); @@ -707,8 +707,8 @@ string_exprt string_constraint_generatort::of_int assert(type.id() == ID_signedbv); size_t width = to_bitvector_type(type).get_width(); exprt ten = constant_signed(10,width); - exprt zero_char = constant_char('0'); - exprt nine_char = constant_char('9'); + exprt zero_char = constant_char('0'); + exprt nine_char = constant_char('9'); exprt minus_char = constant_char('-'); axioms.emplace_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), @@ -721,14 +721,14 @@ string_exprt string_constraint_generatort::of_int binary_relation_exprt(chr,ID_le,nine_char)); axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); - for(size_t size=1; size<=max_size;size++) + for(size_t size=1; size<=max_size;size++) { exprt sum = constant_signed(0,width); exprt all_numbers = true_exprt(); chr = res[0]; exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(size_t j=1; j1) + if(size>1) { axioms.emplace_back(and_exprt(premise,starts_with_digit), not_exprt(equal_exprt(res[refined_string_typet::index_zero()],zero_char))); @@ -767,7 +767,7 @@ string_exprt string_constraint_generatort::of_int } -exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_width, typet char_type) +exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { exprt zero_char = constant_char(48); exprt nine_char = constant_char(57); @@ -814,12 +814,12 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) (binary_relation_exprt(chr,ID_ge,a_char), binary_relation_exprt(chr,ID_le,f_char)))); } - + equal_exprt premise(res.has_length(size)); axioms.emplace_back(premise, and_exprt(equal_exprt(i,sum),all_numbers)); - + //disallow 0s at the beggining - if(size>1) + if(size>1) axioms.emplace_back(premise, not_exprt(equal_exprt(res[0],zero_char))); } return res; @@ -1001,7 +1001,7 @@ string_exprt string_constraint_generatort::string_insert (const function_application_exprt &f) { string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = string_of_expr(args(f,3)[2]); + string_exprt s2 = string_of_expr(args(f,3)[2]); return string_insert(s1, s2, args(f,3)[1]); } @@ -1089,7 +1089,7 @@ exprt string_constraint_generatort::string_equal } exprt character_equals_ignore_case -(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) +(exprt char1, exprt char2, exprt char_a, exprt char_A, exprt char_Z) { exprt is_upper_case_1 = and_exprt(binary_relation_exprt(char_A,ID_le,char1), binary_relation_exprt(char1,ID_le,char_Z)); @@ -1101,10 +1101,10 @@ exprt character_equals_ignore_case } exprt string_constraint_generatort::string_equals_ignore_case -(const function_application_exprt &f) +(const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - + symbol_exprt eq = fresh_boolean("equal_ignore_case"); typecast_exprt tc_eq(eq,f.type()); @@ -1128,7 +1128,7 @@ exprt string_constraint_generatort::string_equals_ignore_case (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,s1.length()))); - + return tc_eq; } @@ -1149,7 +1149,7 @@ exprt string_constraint_generatort::string_data symbol_exprt qvar = fresh_univ_index("QA_string_data"); // translating data[qvar] to the correct expression // which is (signed int)byte_extract_little_endian(data, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian(tab.data, 0l, unsigned short int *)), unsigned short int) - exprt char_in_tab = typecast_exprt + exprt char_in_tab = typecast_exprt (byte_extract_exprt(ID_byte_extract_little_endian,data, plus_exprt (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), @@ -1175,11 +1175,11 @@ string_exprt string_constraint_generatort::of_char_array exprt char_in_tab = data; assert(char_in_tab.id() == ID_index); char_in_tab.op1() = plus_exprt(qvar,offset); - + string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); axioms.push_back(eq.forall(qvar,count)); axioms.emplace_back(equal_exprt(str.length(),count)); - + return str; } @@ -1188,7 +1188,7 @@ string_exprt string_constraint_generatort::of_char_array { exprt offset; exprt count; - if(f.arguments().size() == 4) + if(f.arguments().size() == 4) { offset = f.arguments()[2]; count = f.arguments()[3]; @@ -1209,7 +1209,7 @@ string_exprt string_constraint_generatort::string_insert_char_array { exprt offset; exprt count; - if(f.arguments().size() == 6) + if(f.arguments().size() == 6) { offset = f.arguments()[4]; count = f.arguments()[5]; @@ -1244,18 +1244,18 @@ exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, axioms.push_back (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) ).forall(qvar,prefix.length())); - + symbol_exprt witness = fresh_exist_index("witness_not_isprefix"); or_exprt s0_notpref_s1(not_exprt(str.longer(plus_exprt(prefix.length(),offset))), and_exprt (str.longer(plus_exprt(prefix.length(),offset)), and_exprt(is_positive(witness), - and_exprt(prefix.strictly_longer(witness), + and_exprt(prefix.strictly_longer(witness), notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); - + axioms.emplace_back(implies_exprt(not_exprt(isprefix),s0_notpref_s1)); - return isprefix; + return isprefix; } exprt string_constraint_generatort::string_is_prefix @@ -1296,15 +1296,15 @@ exprt string_constraint_generatort::string_is_suffix string_exprt s1 = string_of_expr(args[swap_arguments?0:1]); // issufix(s1,s0) => s0.length >= s1.length - // && forall witness < s1.length. + // && forall witness < s1.length. // issufix => s1[witness] = s0[witness + s0.length - s1.length] - // && !issuffix => s1.length > s0.length + // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] axioms.emplace_back(implies_exprt(issuffix, s1.longer(s0))); symbol_exprt qvar = fresh_univ_index("QA_suffix"); - exprt qvar_shifted = plus_exprt(qvar, + exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); axioms.push_back (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) @@ -1312,13 +1312,13 @@ exprt string_constraint_generatort::string_is_suffix symbol_exprt witness = fresh_exist_index("witness_not_suffix"); - exprt shifted = plus_exprt(witness, + exprt shifted = plus_exprt(witness, minus_exprt(s1.length(), s0.length())); implies_exprt lemma2(not_exprt(issuffix), and_exprt(is_positive(witness), or_exprt(s0.strictly_longer(s1), - and_exprt(s0.strictly_longer(witness), + and_exprt(s0.strictly_longer(witness), notequal_exprt(s0[witness],s1[shifted]))))); axioms.emplace_back(lemma2); @@ -1340,8 +1340,8 @@ exprt string_constraint_generatort::string_contains // && startpos <= s0.length - s1.length // && forall qvar < s1.length. // contains => s1[qvar] = s0[startpos + qvar] - // !contains => s1.length > s0.length - // || (forall startpos <= s0.length - s1.length. + // !contains => s1.length > s0.length + // || (forall startpos <= s0.length - s1.length. // exists witness < s1.length && s1[witness] != s0[witness + startpos] axioms.emplace_back(implies_exprt(contains, s0.longer(s1))); @@ -1360,7 +1360,7 @@ exprt string_constraint_generatort::string_contains // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] axioms.push_back (string_constraintt::not_contains - (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), + (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0.longer(s1)),refined_string_typet::index_zero(),s1.length(),s0,s1)); return tc_contains; @@ -1374,14 +1374,14 @@ exprt string_constraint_generatort::string_hash_code(const function_application_ // initialisation of the missing pool variable std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) if(hash.find(it->second) == hash.end()) hash[it->second] = string_exprt::fresh_symbol("hash", return_type); - // for each string s. + // for each string s. // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) - // WARNING: the specification may be incomplete + // WARNING: the specification may be incomplete for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { symbol_exprt i = fresh_exist_index("index_hash"); @@ -1406,8 +1406,8 @@ exprt string_constraint_generatort::string_index_of symbol_exprt contains = fresh_boolean("contains_in_index_of"); // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) - // && forall n. from_index <= n < i => s[n] != c - + // && forall n. from_index <= n < i => s[n] != c + axioms.push_back(string_constraintt (equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains) ).exists(index,refined_string_typet::index_of_int(-1),str.length())); @@ -1435,14 +1435,14 @@ exprt string_constraint_generatort::string_index_of_string(const string_exprt &s (str.longer(plus_exprt(substring.length(),offset)), binary_relation_exprt(offset,ID_ge,from_index))); axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); - + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) ).forall(qvar,substring.length())); - - return offset; + + return offset; } exprt string_constraint_generatort::string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) @@ -1453,14 +1453,14 @@ exprt string_constraint_generatort::string_last_index_of_string(const string_exp (str.longer(plus_exprt(substring.length(),offset)), binary_relation_exprt(offset,ID_le,from_index))); axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); - + // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) ).forall(qvar,substring.length())); - - return offset; + + return offset; } @@ -1480,26 +1480,26 @@ exprt string_constraint_generatort::string_index_of if(refined_string_typet::is_java_string_type(c.type())) { string_exprt sub = string_of_expr(c); - return string_index_of_string(str,sub,from_index); - } + return string_index_of_string(str,sub,from_index); + } else - return string_index_of(str,typecast_exprt(c,get_char_type()),from_index); + return string_index_of(str,typecast_exprt(c,get_char_type()),from_index); } exprt string_constraint_generatort::string_last_index_of -(const string_exprt &str, const exprt & c, const exprt & from_index) +(const string_exprt &str, const exprt & c, const exprt & from_index) { symbol_exprt index = fresh_exist_index("last_index_of"); symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) - // && forall n. i <= n <= from_index => s[n] != c + // && forall n. i <= n <= from_index => s[n] != c exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); axioms.emplace_back(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); - + symbol_exprt n = fresh_univ_index("QA_last_index_of"); axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); @@ -1525,8 +1525,8 @@ exprt string_constraint_generatort::string_last_index_of if(refined_string_typet::is_java_string_type(c.type())) { string_exprt sub = string_of_expr(c); - return string_last_index_of_string(str,sub,from_index); - } + return string_last_index_of_string(str,sub,from_index); + } else return string_last_index_of(str,typecast_exprt(c,get_char_type()),from_index); } @@ -1546,17 +1546,17 @@ exprt string_constraint_generatort::char_literal { const string_constantt s = to_string_constant(arg.op0().op0().op0()); irep_idt sval = s.get_value(); - assert(sval.size() == 1); - + assert(sval.size() == 1); + std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); - + return constant_exprt(binary, get_char_type()); } else { throw "convert_char_literal unimplemented"; } - + } @@ -1582,23 +1582,23 @@ exprt string_constraint_generatort::string_parse_int assert(type.id() == ID_signedbv); size_t width = to_bitvector_type(type).get_width(); constant_exprt ten(integer2binary(10,width),type); - + exprt chr = str[0]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_plus = equal_exprt(chr,plus_char); - exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); - - for(unsigned size=1; size<=10;size++) + exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); + + for(unsigned size=1; size<=10;size++) { exprt sum = constant_exprt(integer2binary(0,width),type); exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - + for(unsigned j=1; j |s1| = |s2| && forall i < |s1|. s1[i] == s2[i] - // res != 0 => + // res != 0 => // (|s1| <= |s2| && exists x < |s1|. res = s1[x] - s2[x] && forall i= |s2| && exists x < |s2|. res = s1[x] - s2[x] && forall i |s2| && res = |s1| - |s2| && forall i<|s2| s1[i]=s2[i]) - + // The second part can be rewriten as: - // exists x. + // exists x. // res != 0 ==> x> 0 && // ((|s1| <= |s2| && x < |s1|) || (|s1| >= |s2| && x < |s2|) && res = s1[x] - s2[x] ) // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| @@ -1771,13 +1771,13 @@ exprt string_constraint_generatort::string_compare_to (and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), or_exprt - (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), + (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), and_exprt(s1.longer(s2),s2.strictly_longer(x)))), and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()), return_type)), or_exprt - (and_exprt(s2.strictly_longer(s1),s1.has_length(x)), + (and_exprt(s2.strictly_longer(s1),s1.has_length(x)), and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); axioms.push_back(string_constraintt @@ -1793,25 +1793,25 @@ symbol_exprt string_constraint_generatort::string_intern(const function_applicat // initialisation of the missing pool variable std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) if(pool.find(it->second) == pool.end()) pool[it->second] = string_exprt::fresh_symbol("pool", return_type); // intern(str) = s_0 || s_1 || ... - // for each string s. + // for each string s. // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) - + //symbol_exprt intern = string_exprt::fresh_symbol("intern",return_type); exprt disj = false_exprt(); - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); - + axioms.emplace_back(disj); // WARNING: the specification may be incomplete or incorrect - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) + for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) if(it->second != str) { symbol_exprt i = fresh_exist_index("index_intern"); axioms.emplace_back @@ -1824,17 +1824,17 @@ symbol_exprt string_constraint_generatort::string_intern(const function_applicat and_exprt(str.strictly_longer(i),is_positive(i) )))))); } - + return pool[str]; } -void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, const exprt & str) +void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, const exprt & str) { - if(str.id()==ID_symbol) + if(str.id()==ID_symbol) assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); - else + else assign_to_symbol(sym,string_of_expr(str)); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index cb42863f2dc..a5884608956 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -17,11 +17,11 @@ class string_constraint_generatort { string_constraint_generatort() : language(UNKNOWN){ } - constant_exprt constant_char(int i); - constant_exprt constant_unsigned(int i,size_t width); - constant_exprt constant_signed(int i,size_t width); + constant_exprt constant_char(int i); + constant_exprt constant_unsigned(int i,size_t width); + constant_exprt constant_signed(int i,size_t width); unsignedbv_typet get_char_type(); - size_t get_char_width(); + size_t get_char_width(); inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; std::vector axioms; @@ -30,12 +30,12 @@ class string_constraint_generatort { // to ensure its equal to the given string expression. string_exprt make_string(const exprt &str); - // Same thing but associates the string to the given symbol instead + // Same thing but associates the string to the given symbol instead // of returning it. void make_string(const symbol_exprt & sym, const exprt &str); - // Boolean symbols that are used to know whether the results + // Boolean symbols that are used to know whether the results // of some functions should be true. std::vector boolean_symbols; @@ -48,13 +48,13 @@ class string_constraint_generatort { std::map symbol_to_string; inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr) - { symbol_to_string[sym.get_identifier()]= expr; } + { symbol_to_string[sym.get_identifier()]= expr; } // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string string_exprt get_string_of_symbol(const symbol_exprt & sym); - // Add to the list of axioms, lemmas which should hold for the string to be + // Add to the list of axioms, lemmas which should hold for the string to be // equal to the given expression. string_exprt of_expr(const exprt & unrefined_string); @@ -62,8 +62,8 @@ class string_constraint_generatort { void string_of_expr(const symbol_exprt & sym, const exprt & str); string_exprt string_of_symbol(const symbol_exprt & sym); - // The following functions convert different string functions - // and add the corresponding lemmas to a list of properties to be checked + // The following functions convert different string functions + // and add the corresponding lemmas to a list of properties to be checked exprt function_application(const function_application_exprt &expr); string_exprt empty_string(const function_application_exprt &f); @@ -154,7 +154,7 @@ class string_constraint_generatort { exprt char_literal(const function_application_exprt &f); - + // Warning: this function is underspecified exprt string_code_point_count(const function_application_exprt &f); // Warning: this function is underspecified @@ -174,7 +174,7 @@ class string_constraint_generatort { enum {C, JAVA, UNKNOWN} language; - + inline bool use_c_string() {return (language == C);} // assert that the number of argument is equal to nb and extract them diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 2c0a3c4dc56..25d11464de7 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -28,7 +28,7 @@ class string_exprt : public struct_exprt { // Default uses C character type string_exprt() : string_exprt(refined_string_typet::char_type()) {}; - // Generate a new symbol of the given type tp with a prefix + // Generate a new symbol of the given type tp with a prefix static symbol_exprt fresh_symbol(const irep_idt &prefix, const typet &tp=bool_typet()); @@ -41,37 +41,37 @@ class string_exprt : public struct_exprt { static exprt within_bounds(const exprt & idx, const exprt & bound); // Expression of the character at position idx in the string - inline index_exprt operator[] (const exprt & idx) const + inline index_exprt operator[] (const exprt & idx) const { return index_exprt(content(), idx);} - inline index_exprt operator[] (int i) const + inline index_exprt operator[] (int i) const { return index_exprt(content(), refined_string_typet::index_of_int(i));} // Comparison on the length of the strings - inline binary_relation_exprt longer(const string_exprt & rhs) const + inline binary_relation_exprt longer(const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt longer (const exprt & rhs) const + inline binary_relation_exprt longer (const exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs); } - inline binary_relation_exprt strictly_longer (const exprt & rhs) const + inline binary_relation_exprt strictly_longer (const exprt & rhs) const { return binary_relation_exprt(rhs, ID_lt, length()); } - inline binary_relation_exprt strictly_longer (const string_exprt & rhs) const + inline binary_relation_exprt strictly_longer (const string_exprt & rhs) const { return binary_relation_exprt(rhs.length(), ID_lt, length()); } - inline binary_relation_exprt strictly_longer (int i) const + inline binary_relation_exprt strictly_longer (int i) const { return strictly_longer(refined_string_typet::index_of_int(i)); } - inline binary_relation_exprt shorter (const string_exprt & rhs) const + inline binary_relation_exprt shorter (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs.length()); } - inline binary_relation_exprt shorter (const exprt & rhs) const + inline binary_relation_exprt shorter (const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } - inline binary_relation_exprt shorter (int i) const + inline binary_relation_exprt shorter (int i) const { return shorter(refined_string_typet::index_of_int(i)); } inline binary_relation_exprt strictly_shorter (const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } inline binary_relation_exprt strictly_shorter (const exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs); } - inline equal_exprt same_length (const string_exprt & rhs) const + inline equal_exprt same_length (const string_exprt & rhs) const { return equal_exprt(length(), rhs.length()); } - inline equal_exprt has_length (const exprt & rhs) const + inline equal_exprt has_length (const exprt & rhs) const { return equal_exprt(length(), rhs); } - inline equal_exprt has_length (int i) const + inline equal_exprt has_length (int i) const { return has_length(refined_string_typet::index_of_int(i)); } static irep_idt extract_java_string(const symbol_exprt & s); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index a3a1cb6be0c..2d3b0dea3b2 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -41,9 +41,9 @@ void string_refinementt::display_index_set() { end = index_set.end(); i != end; ++i) { const exprt &s = i->first; debug() << "IS(" << pretty_short(s) << ") == {"; - + for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) + j != end; ++j) debug() << pretty_short (*j) << "; "; debug() << "}" << eom; } @@ -61,7 +61,7 @@ void string_refinementt::add_instantiations() debug() << "IS(" << pretty_short(s) << ") == {"; for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) + j != end; ++j) debug() << pretty_short (*j) << "; "; debug() << "}" << eom; @@ -86,10 +86,10 @@ literalt string_refinementt::convert_rest(const exprt &expr) { // can occur in __CPROVER_assume bvt bv = convert_function_application(to_function_application_expr(expr)); - assert(bv.size() == 1); + assert(bv.size() == 1); return bv[0]; } - else + else { return SUB::convert_rest(expr); } @@ -107,7 +107,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) string_exprt str = generator.string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; - } + } else return SUB::convert_symbol(expr); } @@ -126,13 +126,13 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) if(expr.lhs().id()==ID_symbol && // We can have affectation of string from StringBuilder or CharSequence - //type==ns.follow(expr.rhs().type()) && + //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - debug() << "string_refinementt " << pretty_short(expr.lhs()) << " <- " + debug() << "string_refinementt " << pretty_short(expr.lhs()) << " <- " << pretty_short(expr.rhs()) << eom; - - if(refined_string_typet::is_unrefined_string_type(type)) + + if(refined_string_typet::is_unrefined_string_type(type)) { generator.check_char_type(expr.lhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); @@ -160,7 +160,7 @@ void string_refinementt::print_time(std::string s) { debug() << s << " TIME == " << (std::chrono::duration_cast - (std::chrono::high_resolution_clock::now()-start_time).count() / 1000) + (std::chrono::high_resolution_clock::now()-start_time).count() / 1000) << eom; } @@ -187,10 +187,10 @@ decision_proceduret::resultt string_refinementt::dec_solve() } //string_axioms.clear(); should not be necessary - + initial_index_set(universal_axioms); debug() << "string_refinementt::dec_solve: warning update_index_set has to be checked" << eom; - update_index_set(cur); + update_index_set(cur); cur.clear(); add_instantiations(); @@ -199,33 +199,33 @@ decision_proceduret::resultt string_refinementt::dec_solve() print_time("string_refinementt::dec_solve"); decision_proceduret::resultt res = SUB::dec_solve(); - - switch(res) + + switch(res) { case D_SATISFIABLE: if(!check_axioms()) { debug() << "check_SAT: got SAT but the model is not correct" << eom; - } + } else { debug() << "check_SAT: the model is correct" << eom; return D_SATISFIABLE; } - + debug() << "refining.." << eom; - current_index_set.clear(); - update_index_set(cur); + current_index_set.clear(); + update_index_set(cur); cur.clear(); add_instantiations(); - if(variable_with_multiple_occurence_in_index) + if(variable_with_multiple_occurence_in_index) { debug() << "WARNING: some variable appears multiple times" << eom; } - + if(current_index_set.empty()){ debug() << "current index set is empty" << eom; return D_SATISFIABLE; - } + } display_index_set(); debug()<< "instantiating NOT_CONTAINS constraints" << eom; @@ -238,11 +238,11 @@ decision_proceduret::resultt string_refinementt::dec_solve() } } break; - default: + default: return res; } - } + } debug () << "string_refinementt::dec_solve reached the maximum number of steps allowed"; return D_ERROR; } @@ -262,15 +262,15 @@ bvt string_refinementt::convert_bool_bv(const exprt &boole, const exprt &orig) void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) { if (!seen_instances.insert(lemma).second) - { - debug() << "string_refinementt::add_lemma : already seen" << eom; - return; + { + debug() << "string_refinementt::add_lemma : already seen" << eom; + return; } - if(lemma == true_exprt()) - { - debug() << "string_refinementt::add_lemma : tautology" << eom; - return; + if(lemma == true_exprt()) + { + debug() << "string_refinementt::add_lemma : tautology" << eom; + return; } debug() << "adding lemma " << pretty_short(lemma) << eom; @@ -280,7 +280,7 @@ void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) cur.push_back(lemma); } -unsigned integer_of_expr(const constant_exprt & expr) +unsigned integer_of_expr(const constant_exprt & expr) { return integer2unsigned(string2integer(as_string(expr.get_value()),2)); } @@ -294,7 +294,7 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s unsigned str[n]; exprt val = get(arr); if(val.id() == "array-list") { - for (size_t i = 0; i < val.operands().size()/2; i++) { + for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; unsigned idx = integer_of_expr(to_constant_expr(index)); if(idx < n){ @@ -315,7 +315,7 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s else buf << "?"; } - + buf << "\""; return buf.str(); } @@ -326,7 +326,7 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) unsignedbv_typet chart; if(arr.type().subtype() == generator.get_char_type()) chart = generator.get_char_type(); - else { + else { assert(false); //assert(arr.type().subtype() == java_char_type); //chart = java_char_type; @@ -335,8 +335,8 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) if(val.id() == "array-list") { exprt ret = array_of_exprt(chart.zero_expr(), array_typet(chart, infinity_exprt(generator.get_index_type()))); - - for (size_t i = 0; i < val.operands().size()/2; i++) { + + for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; assert(index.type() == generator.get_index_type()); exprt value = val.operands()[i*2+1]; @@ -345,52 +345,52 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) ret = with_exprt(ret, index, value); } return ret; - + } else { - debug() << "unable to get array-list value of " + debug() << "unable to get array-list value of " << pretty_short(val) << eom; return arr; } } - + bool string_refinementt::check_axioms() { // build the interpretation from the model of the prop_solver - + debug() << "string_refinementt::check_axioms: ===============" << "===========================================" << eom; - debug() << "string_refinementt::check_axioms: build the" + debug() << "string_refinementt::check_axioms: build the" << " interpretation from the model of the prop_solver" << eom; replace_mapt fmodel; std::map::iterator it; - for (it = generator.symbol_to_string.begin(); it != generator.symbol_to_string.end(); ++it) + for (it = generator.symbol_to_string.begin(); it != generator.symbol_to_string.end(); ++it) { string_exprt refined = it->second; const exprt &econtent = refined.content(); const exprt &elength = refined.length(); - + exprt len = get(elength); exprt arr = get_array(econtent, len); fmodel[elength] = len; fmodel[econtent] = arr; - debug() << it->first << " = " << pretty_short(it->second) + debug() << it->first << " = " << pretty_short(it->second) << " of length " << pretty_short(len) <<" := " << eom - << pretty_short(get(econtent)) << eom + << pretty_short(get(econtent)) << eom << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = generator.boolean_symbols.begin(); it != generator.boolean_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } for(std::vector::iterator it = generator.index_symbols.begin(); it != generator.index_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; fmodel[*it] = get(*it); } @@ -438,17 +438,17 @@ bool string_refinementt::check_axioms() debug() << violated.size() << " string axioms can be violated" << eom; if(use_counter_example) { - + std::vector new_axioms(violated.size()); - + // Checking if the current solution satisfies the constraints for (size_t i = 0; i < violated.size(); ++i) { - + new_axioms[i] = universal_axioms[violated[i].first]; const exprt &val = violated[i].second; const string_constraintt &axiom = universal_axioms[violated[i].first]; - + exprt premise(axiom.premise()); exprt body(axiom.body()); implies_exprt instance(premise, body); @@ -462,7 +462,7 @@ bool string_refinementt::check_axioms() return false; } - + } @@ -503,22 +503,22 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { // We should group constants together... const exprt &t = it->first; int second = negated?(-it->second):it->second; - if(t.id() == ID_constant) + if(t.id() == ID_constant) { std::string value(to_constant_expr(t).get_value().c_str()); constants += binary2integer(value,true) * second; - } + } else { if(second != 0) { - if(second == -1) + if(second == -1) { if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); else sum = minus_exprt(sum,t); } else if(second == 1) - { + { if(sum == refined_string_typet::index_of_int(0)) sum = t; else sum = plus_exprt(sum, t); } @@ -526,7 +526,7 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { else { debug() << "in string_refinementt::sum_of_map:" - << " warning: several occurences of the same variable: " + << " warning: several occurences of the same variable: " << t.pretty() << eom; variable_with_multiple_occurence_in_index = true; if(second > 1) @@ -538,7 +538,7 @@ exprt string_refinementt::sum_of_map(std::map & m, bool negated) { } } } - + return plus_exprt(sum,constant_exprt(integer2binary(constants, STRING_SOLVER_INDEX_WIDTH), refined_string_typet::index_type())); } @@ -547,12 +547,12 @@ exprt string_refinementt::simplify_sum(const exprt &f) { return sum_of_map(map); } -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) +exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) { exprt positive, negative; // number of time the element should be added (can be negative) - // qvar has to be equal to val - f(0) if it appears positively in f - // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively + // qvar has to be equal to val - f(0) if it appears positively in f + // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively // in f. So we start by computing val - f(0). std::map< exprt, int> elems = map_of_sum(minus_exprt(val,f)); @@ -574,8 +574,8 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con elems.erase(it); } } - - if (!found) { + + if (!found) { debug() << "string_refinementt::compute_subst: qvar not found" << eom; debug() << "qvar = " << qvar.pretty() << eom << "val = " << val.pretty() << eom @@ -585,7 +585,7 @@ exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, con return sum_of_map(elems,neg); } - + class find_qvar_visitor: public const_expr_visitort { @@ -601,7 +601,7 @@ class find_qvar_visitor: public const_expr_visitort { }; // Look for the given symbol in the index expression -bool find_qvar(const exprt index, const symbol_exprt & qvar) +bool find_qvar(const exprt index, const symbol_exprt & qvar) { find_qvar_visitor v2(qvar); try { @@ -612,9 +612,9 @@ bool find_qvar(const exprt index, const symbol_exprt & qvar) void string_refinementt::initial_index_set -(const std::vector & string_axioms) +(const std::vector & string_axioms) { - for (size_t i = 0; i < string_axioms.size(); ++i) + for (size_t i = 0; i < string_axioms.size(); ++i) initial_index_set(string_axioms[i]); } @@ -635,11 +635,11 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom) { exprt cur = to_process.back(); to_process.pop_back(); - if (cur.id() == ID_index) + if (cur.id() == ID_index) { const exprt &s = cur.op0(); const exprt &i = cur.op1(); - + bool has_quant_var = find_qvar(i,qvar); // if cur is of the form s[i] and no quantified variable appears in i @@ -656,10 +656,10 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom) current_index_set[s].insert(e); index_set[s].insert(e); } - - } + + } else - forall_operands(it, cur) + forall_operands(it, cur) to_process.push_back(*it); } } @@ -693,15 +693,15 @@ void string_refinementt::update_index_set(const exprt &formula) } -// Will be used to visit an expression and return the index used +// Will be used to visit an expression and return the index used // with the given char array class find_index_visitor: public const_expr_visitort { private: const exprt &str_; - + public: find_index_visitor(const exprt &str): str_(str){} - + void operator()(const exprt &expr) { if (expr.id() == ID_index) { const index_exprt &i = to_index_expr(expr); @@ -717,7 +717,7 @@ exprt find_index(const exprt & expr, const exprt & str) { try { expr.visit(v1); return nil_exprt(); - } + } catch (exprt i) { return i; } } @@ -730,14 +730,14 @@ string_constraintt string_refinementt::instantiate(const string_constraintt &axi exprt idx = find_index(axiom.body(),str); if(idx.is_nil()) return string_constraintt(); if(!find_qvar(idx,axiom.get_univ_var())) return string_constraintt(); - + exprt r = compute_subst(axiom.get_univ_var(), val, idx); exprt instance(axiom); replace_expr(axiom.get_univ_var(), r, instance); // We are not sure the index set contains only positive numbers exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val)); replace_expr(axiom.get_univ_var(), r, bounds); - return string_constraintt(bounds,instance); + return string_constraintt(bounds,instance); } @@ -761,8 +761,8 @@ void string_refinementt::instantiate_not_contains(const string_constraintt & axi exprt witness_bounds = implies_exprt (and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,plus_exprt(val,axiom.witness_of(val))), - and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,axiom.witness_of(val))), - and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,axiom.witness_of(val)), + and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,axiom.witness_of(val))), + and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,axiom.witness_of(val)), binary_relation_exprt(refined_string_typet::index_zero(),ID_le,axiom.witness_of(val)))))); new_lemmas.push_back(witness_bounds); } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index ecd21143b2c..35e7dc0741a 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -37,19 +37,19 @@ class string_refinementt: public bv_refinementt static exprt is_positive(const exprt & x); -private: +private: typedef bv_refinementt SUB; std::chrono::high_resolution_clock::time_point start_time; protected: - + typedef std::set expr_sett; - + virtual bvt convert_symbol(const exprt &expr); virtual bvt convert_function_application (const function_application_exprt &expr); - + decision_proceduret::resultt dec_solve(); // fills as many 0 as necessary in the bit vectors to have the right width @@ -57,12 +57,12 @@ class string_refinementt: public bv_refinementt private: - + string_constraint_generatort generator; // Simple constraints that have been given to the solver expr_sett seen_instances; - // + // std::vector universal_axioms; // std::vector not_contains_axioms; @@ -105,12 +105,12 @@ class string_refinementt: public bv_refinementt void initial_index_set(const string_constraintt &axiom); void initial_index_set(const std::vector &string_axioms); - // Takes an universaly quantified formula [axiom], - // an array of char variable [s], and an index expression [val]. + // Takes an universaly quantified formula [axiom], + // an array of char variable [s], and an index expression [val]. // Computes one index [v1] in which [axiom.idx] appears, takes the // corresponding substitition [r] (obtained with [compute_subst]). // Then substitutes [axiom.idx] with [r] in [axiom]. - // axiom is not constant because we may record some information about + // axiom is not constant because we may record some information about // instantiation of existential variables. string_constraintt instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val); @@ -127,7 +127,7 @@ class string_refinementt: public bv_refinementt // elems different from qvar. // // Takes e minus the sum of the element in elems. // exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); - + // Rewrite a sum in a simple form: sum m_i * expr_i std::map< exprt, int> map_of_sum(const exprt &f); exprt sum_of_map(std::map &m,bool negated=false); From 54b6947dd73ae579862eb6d0b7bfb7f2f1f0c4de Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 10:30:55 +0000 Subject: [PATCH 197/221] Renaming make_of_char_array... functions to make_char_array... --- src/goto-programs/pass_preprocess.cpp | 12 ++++++------ src/goto-programs/pass_preprocess.h | 10 +++++----- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index 3f9d9e9e709..f18982780bd 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -186,7 +186,7 @@ void pass_preprocesst::make_to_char_array_function } -void pass_preprocesst::make_of_char_array_function +void pass_preprocesst::make_char_array_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -206,7 +206,7 @@ void pass_preprocesst::make_of_char_array_function make_string_function(i_it,function_name); } -void pass_preprocesst::make_of_char_array_function_call +void pass_preprocesst::make_char_array_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -225,7 +225,7 @@ void pass_preprocesst::make_of_char_array_function_call make_string_function_call(i_it,function_name); } -void pass_preprocesst::make_of_char_array_side_effect +void pass_preprocesst::make_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -272,11 +272,11 @@ void pass_preprocesst::replace_string_calls else if(string_function_calls.find(function_id) != string_function_calls.end()) make_string_function_call(i_it, string_function_calls[function_id]); else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) - make_of_char_array_function(i_it,string_of_char_array_functions[function_id]); + make_char_array_function(i_it,string_of_char_array_functions[function_id]); else if(string_of_char_array_function_calls.find(function_id) != string_of_char_array_function_calls.end()) - make_of_char_array_function_call(i_it,string_of_char_array_function_calls[function_id]); + make_char_array_function_call(i_it,string_of_char_array_function_calls[function_id]); else if(side_effect_char_array_functions.find(function_id) != side_effect_char_array_functions.end()) - make_of_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); + make_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) make_to_char_array_function(goto_program,i_it); } diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index c9df31d55ce..5041e00e3dd 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -63,19 +63,19 @@ class pass_preprocesst:public messaget void make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator &); - // replace "r.some_function(arr,...)" by + // replace "r = some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); - void make_of_char_array_function_call + void make_char_array_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = some_function(arr,...)" by + // replace "r.some_function(arr,...)" by // "r = function_name(arr.length,arr.data,...); - void make_of_char_array_function + void make_char_array_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" // and add a correspondance from r to s in the string_builders map - void make_of_char_array_side_effect + void make_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); bool has_java_string_type(const exprt &expr); From ab4c970e450403b0354f12ae306a7cbf5b8ca120 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 10:46:21 +0000 Subject: [PATCH 198/221] Catching java.lang.String in string refinement We consider the symbolic type java.lang.String to be a string type in the string refinement. --- src/solvers/refinement/refined_string_type.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp index a8de366ffe5..d590cd91737 100644 --- a/src/solvers/refinement/refined_string_type.cpp +++ b/src/solvers/refinement/refined_string_type.cpp @@ -41,7 +41,13 @@ bool refined_string_typet::is_java_string_type(const typet &type) bool refined_string_typet::is_java_deref_string_type(const typet &type) { - if(type.id() == ID_struct) { + if(type.id() == ID_symbol) + { + irep_idt tag = to_symbol_type(type).get_identifier(); + return (tag == irep_idt("java::java.lang.String")); + } + else if(type.id() == ID_struct) + { irep_idt tag = to_struct_type(type).get_tag(); return (tag == irep_idt("java.lang.String")); } From f87e148a0433f4fc92a6d259ee6e8c0ae84ae10a Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 10:59:49 +0000 Subject: [PATCH 199/221] Renaming STRING_SOLVER CHAR_WIDTH symbols Renamed STRING_SOLVER_CHAR_WIDTH to STRING_SOLVER_C_CHAR_WIDTH and JAVA_STRING_SOLVER_CHAR_WIDTH to STRING_SOLVER_JAVA_CHAR_WIDTH to avoid confusion. --- src/solvers/refinement/refined_string_type.h | 8 ++++---- .../refinement/string_constraint_generator.cpp | 15 ++++++++------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index f4fb0c59f74..e993c6d99f8 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -14,8 +14,8 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #define STRING_SOLVER_INDEX_WIDTH 32 -#define STRING_SOLVER_CHAR_WIDTH 8 -#define JAVA_STRING_SOLVER_CHAR_WIDTH 16 +#define STRING_SOLVER_C_CHAR_WIDTH 8 +#define STRING_SOLVER_JAVA_CHAR_WIDTH 16 // Internal type used for string refinement class refined_string_typet : public struct_typet { @@ -27,9 +27,9 @@ class refined_string_typet : public struct_typet { { return to_array_type((to_struct_type(*this)).components()[1].type());} // Types used in this refinement - static inline unsignedbv_typet char_type() { return unsignedbv_typet(STRING_SOLVER_CHAR_WIDTH);} + static inline unsignedbv_typet char_type() { return unsignedbv_typet(STRING_SOLVER_C_CHAR_WIDTH);} - static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(JAVA_STRING_SOLVER_CHAR_WIDTH);} + static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(STRING_SOLVER_JAVA_CHAR_WIDTH);} static inline signedbv_typet index_type() { return signedbv_typet(STRING_SOLVER_INDEX_WIDTH);} diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index d154f58a290..7b13a44d458 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -19,9 +19,10 @@ constant_exprt string_constraint_generatort::constant_char(int i) switch(language) { case C : - return constant_exprt(integer2binary(i,STRING_SOLVER_CHAR_WIDTH),refined_string_typet::char_type()); + return constant_exprt(integer2binary(i,STRING_SOLVER_C_CHAR_WIDTH), + refined_string_typet::char_type()); break; - case JAVA : return constant_exprt(integer2binary(i,JAVA_STRING_SOLVER_CHAR_WIDTH),refined_string_typet::java_char_type()); + case JAVA : return constant_exprt(integer2binary(i,STRING_SOLVER_JAVA_CHAR_WIDTH),refined_string_typet::java_char_type()); break; default: assert(false); } @@ -60,8 +61,8 @@ unsignedbv_typet string_constraint_generatort::get_char_type() size_t string_constraint_generatort::get_char_width() { if(language==C) - return STRING_SOLVER_CHAR_WIDTH; - else if(language==JAVA) return JAVA_STRING_SOLVER_CHAR_WIDTH; + return STRING_SOLVER_C_CHAR_WIDTH; + else if(language==JAVA) return STRING_SOLVER_JAVA_CHAR_WIDTH; else assert(false); } @@ -350,7 +351,7 @@ string_exprt string_constraint_generatort::string_literal(const function_applica const exprt &s = arg.op0().op0().op0(); sval = to_string_constant(s).get_value(); - char_width = STRING_SOLVER_CHAR_WIDTH; + char_width = STRING_SOLVER_C_CHAR_WIDTH; char_type = refined_string_typet::char_type(); } @@ -363,7 +364,7 @@ string_exprt string_constraint_generatort::string_literal(const function_applica //it seems the value of the string is lost, we need to recover it from the identifier sval = extract_java_string(to_symbol_expr(s)); - char_width = JAVA_STRING_SOLVER_CHAR_WIDTH; + char_width = STRING_SOLVER_JAVA_CHAR_WIDTH; char_type = refined_string_typet::java_char_type(); } @@ -1548,7 +1549,7 @@ exprt string_constraint_generatort::char_literal irep_idt sval = s.get_value(); assert(sval.size() == 1); - std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_CHAR_WIDTH); + std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_C_CHAR_WIDTH); return constant_exprt(binary, get_char_type()); } From 392156827a37aee3bb5c937626d3ccd6167e10c1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 11:06:33 +0000 Subject: [PATCH 200/221] using from_integer instead of calls to integer2binary --- src/solvers/refinement/refined_string_type.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index e993c6d99f8..2e3c1c99756 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -12,6 +12,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +#include #define STRING_SOLVER_INDEX_WIDTH 32 #define STRING_SOLVER_C_CHAR_WIDTH 8 @@ -64,8 +65,7 @@ class refined_string_typet : public struct_typet { { return (is_unrefined_string_type(expr.type())); } static inline constant_exprt index_of_int(int i) - { return constant_exprt(integer2binary(i, STRING_SOLVER_INDEX_WIDTH), - index_type()); } + { return from_integer(i,index_type()); } }; From ed0f02caf209cdcb4f0af399abb07ad38d393ce0 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 11:13:39 +0000 Subject: [PATCH 201/221] Renamed forall and exists methods to with_forall and with_exists --- src/solvers/refinement/string_constraint.cpp | 12 +-- src/solvers/refinement/string_constraint.h | 8 +- .../string_constraint_generator.cpp | 76 +++++++++---------- 3 files changed, 48 insertions(+), 48 deletions(-) diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index d39c49cb006..d700bdfbd03 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -31,7 +31,7 @@ exprt string_constraintt::body() const { } else throw "string_constraintt::body() should not be applied to NOT_CONTAINS expression"; } -string_constraintt string_constraintt::forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup) +string_constraintt string_constraintt::with_forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup) { string_constraintt sc(*this); sc.form = UNIV_QUANT; @@ -41,9 +41,9 @@ string_constraintt string_constraintt::forall(const symbol_exprt & univ, const e return sc; } -string_constraintt string_constraintt::forall(const symbol_exprt & univ, const exprt & bound_sup) +string_constraintt string_constraintt::with_forall(const symbol_exprt & univ, const exprt & bound_sup) { - return forall(univ,refined_string_typet::index_zero(),bound_sup); + return with_forall(univ,refined_string_typet::index_zero(),bound_sup); } string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, @@ -62,7 +62,7 @@ string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt return sc; } -string_constraintt string_constraintt::exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) +string_constraintt string_constraintt::with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) { assert(is_simple() || is_string_constant()); return string_constraintt @@ -71,7 +71,7 @@ string_constraintt string_constraintt::exists(const symbol_exprt & exist, const binary_relation_exprt(exist, ID_lt, bound_sup)))); } -string_constraintt string_constraintt::exists(const symbol_exprt & univ, const exprt & bound_sup) +string_constraintt string_constraintt::with_exists(const symbol_exprt & univ, const exprt & bound_sup) { - return exists(univ,refined_string_typet::index_zero(),bound_sup); + return with_exists(univ,refined_string_typet::index_zero(),bound_sup); } diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 0c4f2d2853c..cb4301bb048 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -54,14 +54,14 @@ class string_constraintt : public exprt { form = SIMPLE; } // Add an universal quantifier - string_constraintt forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup); + string_constraintt with_forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup); // Default bound inferior is 0 - string_constraintt forall(const symbol_exprt & univ, const exprt & bound_sup); + string_constraintt with_forall(const symbol_exprt & univ, const exprt & bound_sup); // Bound a variable that is existentially quantified - string_constraintt exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); + string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); // Default bound inferior is 0 - string_constraintt exists(const symbol_exprt & exist, const exprt & bound_sup); + string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_sup); static string_constraintt not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 7b13a44d458..8d9704479a7 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -133,13 +133,13 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) axioms.emplace_back(expr.cond(),res.same_length(t)); symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar]) - ).forall(qvar,t.length())); + ).with_forall(qvar,t.length())); axioms.emplace_back(not_exprt(expr.cond()),res.same_length(f)); symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); axioms.push_back(string_constraintt(not_exprt(expr.cond()), equal_exprt(res[qvar2],f[qvar2]) - ).forall(qvar2,f.length())); + ).with_forall(qvar2,f.length())); return res; } @@ -383,12 +383,12 @@ string_exprt string_constraint_generatort::string_concat(const string_exprt & s1 // forall i<|s1|. res[i] = s1[i] symbol_exprt idx = fresh_univ_index("QA_index_concat"); string_constraintt a1(equal_exprt(s1[idx],res[idx])); - axioms.push_back(a1.forall(idx, s1.length())); + axioms.push_back(a1.with_forall(idx, s1.length())); // forall i<|s2|. res[i+|s1|] = s2[i] symbol_exprt idx2 = fresh_univ_index("QA_index_concat2"); string_constraintt a2(equal_exprt(s2[idx2],res[plus_exprt(idx2,s1.length())])); - axioms.push_back(a2.forall(idx2, s2.length())); + axioms.push_back(a2.with_forall(idx2, s2.length())); return res; } @@ -413,7 +413,7 @@ string_exprt string_constraint_generatort::string_copy(const function_applicatio axioms.emplace_back(res.same_length(s1)); symbol_exprt idx = fresh_univ_index("QA_index_copy"); string_constraintt a1(equal_exprt(s1[idx],res[idx])); - axioms.push_back(a1.forall(idx, s1.length())); + axioms.push_back(a1.with_forall(idx, s1.length())); return res; } @@ -431,7 +431,7 @@ string_exprt string_constraint_generatort::string_set_length(const function_appl string_constraintt a1 (and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); - axioms.push_back(a1.forall(idx, k)); + axioms.push_back(a1.with_forall(idx, k)); return res; } @@ -462,7 +462,7 @@ string_exprt string_constraint_generatort::string_value_of(const function_applic axioms.emplace_back(res.has_length(count)); symbol_exprt idx = fresh_univ_index("QA_index_value_of"); string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],res[idx])); - axioms.push_back(a1.forall(idx, count)); + axioms.push_back(a1.with_forall(idx, count)); return res; } else @@ -499,7 +499,7 @@ string_exprt string_constraint_generatort::string_substring // forall idx < str.length, str[idx] = arg_str[idx+i] string_constraintt a(equal_exprt(res[idx], str[plus_exprt(start, idx)])); - axioms.push_back(a.forall(idx,res.length())); + axioms.push_back(a.with_forall(idx,res.length())); return res; } @@ -521,17 +521,17 @@ string_exprt string_constraint_generatort::string_trim symbol_exprt n = fresh_univ_index("QA_index_trim"); // forall n < m, str[n] = ' ' string_constraintt a(equal_exprt(str[n], space_char)); - axioms.push_back(a.forall(n,idx)); + axioms.push_back(a.with_forall(n,idx)); symbol_exprt n2 = fresh_univ_index("QA_index_trim2"); // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(res.length(),n2))], space_char)); - axioms.push_back(a1.forall(n2,minus_exprt(str.length(),plus_exprt(idx,res.length())))); + axioms.push_back(a1.with_forall(n2,minus_exprt(str.length(),plus_exprt(idx,res.length())))); symbol_exprt n3 = fresh_univ_index("QA_index_trim3"); // forall n < |s1|, s[idx+n] = s1[n] string_constraintt a2(equal_exprt(res[n3], str[plus_exprt(n3, idx)])); - axioms.push_back(a2.forall(n3,res.length())); + axioms.push_back(a2.with_forall(n3,res.length())); // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| or_exprt m_index_condition(equal_exprt(idx,str.length()), and_exprt @@ -560,7 +560,7 @@ string_exprt string_constraint_generatort::string_to_lower_case equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); equal_exprt eq(res[idx], str[idx]); string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); - axioms.push_back(a.forall(idx,res.length())); + axioms.push_back(a.with_forall(idx,res.length())); return res; } @@ -584,7 +584,7 @@ string_exprt string_constraint_generatort::string_to_upper_case equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); equal_exprt eq(res[idx], str[idx]); string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); - axioms.push_back(a.forall(idx,res.length())); + axioms.push_back(a.with_forall(idx,res.length())); return res; } @@ -629,7 +629,7 @@ string_exprt string_constraint_generatort::of_float symbol_exprt qvar = fresh_univ_index("QA_equal_nan"); axioms.push_back (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) - ).forall(qvar,nan_string.length())); + ).with_forall(qvar,nan_string.length())); // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. @@ -650,7 +650,7 @@ string_exprt string_constraint_generatort::of_float symbol_exprt qvar_inf = fresh_univ_index("QA_equal_infinity"); axioms.push_back (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) - ).forall(qvar_inf,infinity_string.length())); + ).with_forall(qvar_inf,infinity_string.length())); //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". @@ -660,7 +660,7 @@ string_exprt string_constraint_generatort::of_float symbol_exprt qvar_zero = fresh_univ_index("QA_equal_zero"); axioms.push_back (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) - ).forall(qvar_zero,zero_string.length())); + ).with_forall(qvar_zero,zero_string.length())); return string_concat(sign_string,magnitude); } @@ -688,13 +688,13 @@ string_exprt string_constraint_generatort::of_bool(const exprt &i) symbol_exprt qvar = fresh_univ_index("QA_equal_true"); axioms.push_back (string_constraintt(eq,equal_exprt(res[qvar],true_string[qvar]) - ).forall(qvar,true_string.length())); + ).with_forall(qvar,true_string.length())); axioms.emplace_back(not_exprt(eq), res.same_length(false_string)); symbol_exprt qvar1 = fresh_univ_index("QA_equal_false"); axioms.push_back (string_constraintt(not_exprt(eq),equal_exprt(res[qvar1],false_string[qvar1]) - ).forall(qvar,false_string.length())); + ).with_forall(qvar,false_string.length())); return res; } @@ -902,7 +902,7 @@ string_exprt string_constraint_generatort::string_replace implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), equal_exprt(res[qvar],str[qvar])) ) - ).forall(qvar,res.length())); + ).with_forall(qvar,res.length())); return res; } @@ -1079,12 +1079,12 @@ exprt string_constraint_generatort::string_equal axioms.emplace_back(eq, s1.same_length(s2)); axioms.push_back (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) - ).forall(qvar,s1.length())); + ).with_forall(qvar,s1.length())); axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(notequal_exprt(s1[witness],s2[witness])).exists(witness,s1.length()))); + string_constraintt(notequal_exprt(s1[witness],s2[witness])).with_exists(witness,s1.length()))); return tc_eq; } @@ -1123,12 +1123,12 @@ exprt string_constraint_generatort::string_equals_ignore_case axioms.push_back (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) - ).forall(qvar,s1.length())); + ).with_forall(qvar,s1.length())); axioms.emplace_back (not_exprt(eq), or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).exists(witness,s1.length()))); + string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).with_exists(witness,s1.length()))); return tc_eq; } @@ -1161,7 +1161,7 @@ exprt string_constraint_generatort::string_data get_char_type()); string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.forall(qvar,str.length())); + axioms.push_back(eq.with_forall(qvar,str.length())); exprt void_expr; void_expr.type() = void_typet(); @@ -1178,7 +1178,7 @@ string_exprt string_constraint_generatort::of_char_array char_in_tab.op1() = plus_exprt(qvar,offset); string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.forall(qvar,count)); + axioms.push_back(eq.with_forall(qvar,count)); axioms.emplace_back(equal_exprt(str.length(),count)); return str; @@ -1244,7 +1244,7 @@ exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, symbol_exprt qvar = fresh_univ_index("QA_isprefix"); axioms.push_back (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) - ).forall(qvar,prefix.length())); + ).with_forall(qvar,prefix.length())); symbol_exprt witness = fresh_exist_index("witness_not_isprefix"); @@ -1309,7 +1309,7 @@ exprt string_constraint_generatort::string_is_suffix minus_exprt(s1.length(), s0.length())); axioms.push_back (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) - ).forall(qvar,s0.length())); + ).with_forall(qvar,s0.length())); symbol_exprt witness = fresh_exist_index("witness_not_suffix"); @@ -1354,7 +1354,7 @@ exprt string_constraint_generatort::string_contains exprt qvar_shifted = plus_exprt(qvar, startpos); axioms.push_back (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) - ).forall(qvar,s1.length())); + ).with_forall(qvar,s1.length())); // We rewrite the axiom for !contains as: // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) @@ -1411,19 +1411,19 @@ exprt string_constraint_generatort::string_index_of axioms.push_back(string_constraintt (equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains) - ).exists(index,refined_string_typet::index_of_int(-1),str.length())); + ).with_exists(index,refined_string_typet::index_of_int(-1),str.length())); axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); symbol_exprt n = fresh_univ_index("QA_index_of"); axioms.push_back(string_constraintt - (contains,not_exprt(equal_exprt(str[n],c))).forall(n,from_index,index)); + (contains,not_exprt(equal_exprt(str[n],c))).with_forall(n,from_index,index)); symbol_exprt m = fresh_univ_index("QA_index_of"); axioms.push_back(string_constraintt (not_exprt(contains),not_exprt(equal_exprt(str[m],c)) - ).forall(m,from_index,str.length())); + ).with_forall(m,from_index,str.length())); return index; } @@ -1441,7 +1441,7 @@ exprt string_constraint_generatort::string_index_of_string(const string_exprt &s symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,substring.length())); + ).with_forall(qvar,substring.length())); return offset; } @@ -1459,7 +1459,7 @@ exprt string_constraint_generatort::string_last_index_of_string(const string_exp symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).forall(qvar,substring.length())); + ).with_forall(qvar,substring.length())); return offset; } @@ -1497,15 +1497,15 @@ exprt string_constraint_generatort::string_last_index_of // && forall n. i <= n <= from_index => s[n] != c exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); - axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); + axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).with_exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); axioms.emplace_back(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); symbol_exprt n = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); + axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).with_forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); symbol_exprt m = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).forall(m,from_index_plus_one)); + axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).with_forall(m,from_index_plus_one)); return index; } @@ -1760,7 +1760,7 @@ exprt string_constraint_generatort::string_compare_to equal_exprt res_null = equal_exprt(res,constant_signed(0,width)); axioms.emplace_back(res_null, s1.same_length(s2)); axioms.push_back(string_constraintt - (res_null,equal_exprt(s1[i],s2[i])).forall(i,s1.length())); + (res_null,equal_exprt(s1[i],s2[i])).with_forall(i,s1.length())); symbol_exprt x = fresh_exist_index("index_compare_to"); axioms.push_back @@ -1782,7 +1782,7 @@ exprt string_constraint_generatort::string_compare_to and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); axioms.push_back(string_constraintt - (not_exprt(res_null),equal_exprt(s1[i],s2[i])).forall(i,x)); + (not_exprt(res_null),equal_exprt(s1[i],s2[i])).with_forall(i,x)); return res; } From 880812d989f9ee84c09d4bbc37a7863c668a4601 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 11:15:28 +0000 Subject: [PATCH 202/221] Renamed not_contains method to create_not_contains This is because this methods of the string_constraintt returns a new object, in the way of a constructor. --- src/solvers/refinement/string_constraint.cpp | 2 +- src/solvers/refinement/string_constraint.h | 2 +- src/solvers/refinement/string_constraint_generator.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index d700bdfbd03..3a913b83f6c 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -46,7 +46,7 @@ string_constraintt string_constraintt::with_forall(const symbol_exprt & univ, co return with_forall(univ,refined_string_typet::index_zero(),bound_sup); } -string_constraintt string_constraintt::not_contains(exprt univ_bound_inf, exprt univ_bound_sup, +string_constraintt string_constraintt::create_not_contains(exprt univ_bound_inf, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1) { diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index cb4301bb048..3bf2c281f49 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -63,7 +63,7 @@ class string_constraintt : public exprt // Default bound inferior is 0 string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_sup); - static string_constraintt not_contains + static string_constraintt create_not_contains (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1); diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 8d9704479a7..0b22113327e 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1360,7 +1360,7 @@ exprt string_constraint_generatort::string_contains // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] axioms.push_back - (string_constraintt::not_contains + (string_constraintt::create_not_contains (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0.longer(s1)),refined_string_typet::index_zero(),s1.length(),s0,s1)); From 0f6409cb740d5d2f9cab03cbd959e1b52a875a60 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 16:33:08 +0000 Subject: [PATCH 203/221] Changing the structure of string_constraintt Since the class derives from exprt it should respect the way exprt are normally structured in cbmc. That is does not have any aditional field but extra information is inside the operands. We also declared a separate class for not_contains constraints which respect the same convention. Corrected instantiation for string constraint Corrected constraint generation of string replace --- src/solvers/refinement/string_constraint.cpp | 84 +--- src/solvers/refinement/string_constraint.h | 241 +++++++---- .../string_constraint_generator.cpp | 407 +++++++++--------- .../refinement/string_constraint_generator.h | 12 +- src/solvers/refinement/string_refinement.cpp | 69 +-- src/solvers/refinement/string_refinement.h | 8 +- src/util/irep_ids.txt | 2 + 7 files changed, 447 insertions(+), 376 deletions(-) diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 3a913b83f6c..8f1c3503310 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -10,68 +10,22 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include -exprt string_constraintt::premise() const { - if(form == SIMPLE || form == UNIV_QUANT) { - if(id() == ID_implies) - return op0(); - else - return true_exprt(); - } - else { - return(*this); - } -} - -exprt string_constraintt::body() const { - if(form == SIMPLE || form == UNIV_QUANT) { - if(id() == ID_implies) - return op1(); - else - return(*this); - } else throw "string_constraintt::body() should not be applied to NOT_CONTAINS expression"; -} - -string_constraintt string_constraintt::with_forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup) -{ - string_constraintt sc(*this); - sc.form = UNIV_QUANT; - sc.quantified_variable = univ; - sc.bounds.push_back(bound_inf); - sc.bounds.push_back(bound_sup); - return sc; -} - -string_constraintt string_constraintt::with_forall(const symbol_exprt & univ, const exprt & bound_sup) -{ - return with_forall(univ,refined_string_typet::index_zero(),bound_sup); -} - -string_constraintt string_constraintt::create_not_contains(exprt univ_bound_inf, exprt univ_bound_sup, - exprt premise, exprt exists_bound_inf, - exprt exists_bound_sup, exprt s0, exprt s1) -{ - string_constraintt sc(premise); - sc.form = NOT_CONTAINS; - sc.bounds.push_back(univ_bound_inf); - sc.bounds.push_back(univ_bound_inf); - sc.bounds.push_back(univ_bound_sup); - sc.bounds.push_back(exists_bound_inf); - sc.bounds.push_back(exists_bound_sup); - sc.compared_strings.push_back(s0); - sc.compared_strings.push_back(s1); - return sc; -} - -string_constraintt string_constraintt::with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) -{ - assert(is_simple() || is_string_constant()); - return string_constraintt - (and_exprt(*this, - and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), - binary_relation_exprt(exist, ID_lt, bound_sup)))); -} - -string_constraintt string_constraintt::with_exists(const symbol_exprt & univ, const exprt & bound_sup) -{ - return with_exists(univ,refined_string_typet::index_zero(),bound_sup); -} +// string_constraintt::string_constraintt(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup, const exprt &prem, const exprt &body) +// : string_constraintt(prem,body) +// { +// copy_to_operands(univ, bound_sup, bound_inf); +// } + +// string_constraintt string_constraintt::with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) +// { +// assert(!is_univ_quant()); +// return string_constraintt +// (and_exprt(*this, +// and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), +// binary_relation_exprt(exist, ID_lt, bound_sup)))); +// } + +// string_constraintt string_constraintt::with_exists(const symbol_exprt & univ, const exprt & bound_sup) +// { +// return with_exists(univ,refined_string_typet::index_zero(),bound_sup); +// } diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 3bf2c281f49..72ef7ccb1df 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -1,7 +1,7 @@ /** -*- C++ -*- *****************************************************\ Module: String constraints - (see the PASS paper at HVC'13 and chapter 7 on arrays of ???) + (see the PASS paper at HVC'13 Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -16,100 +16,179 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com class string_constraintt : public exprt { -private: - // String axioms can have 4 different forms: - // either a simple expression p, - // or a string constant: forall x in [0,|s|[. s(x) = c(x) - // or universally quantified expression: forall x in [lb,ub[. p(x) - // or a expression for non containment: - // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[y] - enum {SIMPLE, STRING_CONSTANT, UNIV_QUANT, NOT_CONTAINS} form; - - // Universally quantified symbol - symbol_exprt quantified_variable; - - // Bounds on the quantified variables (alternate between inf and sup) - std::vector bounds; - - // Only for NOT_CONTAINS constraints (represent s1 and s2) - std::vector compared_strings; - - // we should change the structure of the class to adopt the notations of chapter 7 - // exprt index_guard; - public: - // used to store information about witnesses for not_contains constraints - symbol_exprt witness; - - - // True axiom - string_constraintt() : exprt(true_exprt()) { form = SIMPLE; } - - // Axiom with no quantification, and no premise - string_constraintt(exprt bod, bool is_string_constant=false) : exprt(bod) { form = is_string_constant?SIMPLE:STRING_CONSTANT; } - - // Axiom with no quantification: prem => bod - string_constraintt(exprt prem, exprt bod) : exprt(implies_exprt(prem,bod)) - { form = SIMPLE; } - - // Add an universal quantifier - string_constraintt with_forall(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup); - // Default bound inferior is 0 - string_constraintt with_forall(const symbol_exprt & univ, const exprt & bound_sup); - - // Bound a variable that is existentially quantified - string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); + // String constraints are of the form + // forall univ_var in [0,bound[. premise => body + // or premise => body + + inline const exprt &premise() const + { + return op0(); + } + + inline const exprt &body() const + { + return op1(); + } + + inline const exprt &univ_var() const + { + return op2(); + } + + inline const exprt &upper_bound() const + { + return op3(); + } + + inline const exprt &lower_bound() const + { + return operands()[4]; + } + + // Trivial constraint + string_constraintt() : exprt(ID_string_constraint) + { + assert(false); //string constraints should not be initialized directly + copy_to_operands(true_exprt(),true_exprt()); + } + + // // Constraint with no quantification, and no premise + // string_constraintt(const exprt & body) : exprt(ID_string_constraint) + // { + // copy_to_operands(true_exprt(),body); + // } + + // Constraint with no quantification: prem => bod + // string_constraintt(const exprt & prem, const exprt & body) + // : exprt(ID_string_constraint) + // { + // copy_to_operands(prem,body); + // } + + // Returns a new constraints with an universal quantifier added + string_constraintt(const symbol_exprt &univ, const exprt &bound_inf, const exprt &bound_sup, const exprt &prem, const exprt &body) + : exprt(ID_string_constraint) + { + copy_to_operands(prem,body); + copy_to_operands(univ, bound_sup, bound_inf); + }; + // Default bound inferior is 0 - string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_sup); - - static string_constraintt create_not_contains - (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, - exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1); + string_constraintt(const symbol_exprt &univ, const exprt &bound_sup, const exprt &prem, const exprt &body) + : string_constraintt(univ, refined_string_typet::index_zero(), bound_sup, prem, body) + {}; - bool is_simple() const { return (form == SIMPLE); }; - bool is_string_constant() const { return (form == STRING_CONSTANT); }; - bool is_univ_quant() const { return (form == UNIV_QUANT); }; - bool is_not_contains() const { return (form == NOT_CONTAINS); }; - - exprt premise() const; - - exprt body() const; - - inline exprt s0() const { assert(is_not_contains()); return compared_strings[0];} - inline exprt s1() const { assert(is_not_contains()); return compared_strings[1];} + // Default premise is true + string_constraintt(const symbol_exprt &univ, const exprt &bound_sup, const exprt &body) + : string_constraintt(univ, refined_string_typet::index_zero(), bound_sup, true_exprt(), body) + {}; + // Bound a variable that is existentially quantified + //string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); - inline symbol_exprt get_univ_var() const { assert(form==UNIV_QUANT); return quantified_variable;} - inline exprt univ_bound_inf() const { return bounds[0]; } - inline exprt univ_bound_sup() const { return bounds[1]; } + // Default bound inferior is 0 + //string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_sup); + + bool is_simple() const { return (operands().size() == 2); }; + bool is_univ_quant() const { return (operands().size() == 5); }; + bool is_not_contains() const { return false; }; + + inline symbol_exprt get_univ_var() const + { return to_symbol_expr(univ_var()); } + inline exprt univ_within_bounds() const - { return and_exprt(binary_relation_exprt(bounds[0],ID_le,get_univ_var()), - binary_relation_exprt(bounds[1],ID_gt,get_univ_var())); } - inline exprt exists_bound_inf() const { return bounds[2]; } - inline exprt exists_bound_sup() const { return bounds[3]; } - - inline exprt witness_of(const exprt & univ_val) const { return index_exprt(witness, univ_val); } + { + return and_exprt + (binary_relation_exprt(lower_bound(), ID_le, get_univ_var()), + binary_relation_exprt(upper_bound(), ID_gt, get_univ_var())); + } + +}; +extern inline const string_constraintt &to_string_constraint(const exprt &expr) +{ + assert(expr.id()==ID_string_constraint && expr.operands().size()==5); + return static_cast(expr); +} - // Warning: this assumes a simple form - inline string_constraintt operator&&(const exprt & a) { - assert(form == SIMPLE); - return string_constraintt(and_exprt(*this, a)); - } +extern inline string_constraintt &to_string_constraint(exprt &expr) +{ + assert(expr.id()==ID_string_constraint && expr.operands().size()==5); + return static_cast(expr); +} - inline string_constraintt operator||(const exprt & a) { - assert(form == SIMPLE); - return string_constraintt(or_exprt(*this, a)); - } +class string_not_contains_constraintt : public exprt +{ +public: + // string_contains_constraintt are formula of the form: + // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[y] - inline string_constraintt operator!() { - assert(form == SIMPLE); - return string_constraintt(not_exprt(*this)); - } + string_not_contains_constraintt + (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, + exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1) + :exprt(ID_string_not_contains_constraint) + { + copy_to_operands(univ_lower_bound, univ_bound_sup, premise); + copy_to_operands(exists_bound_inf, exists_bound_sup, s0); + copy_to_operands(s1); + }; + + bool is_not_contains() const { return true; }; + + inline const exprt &univ_lower_bound() const + { + return operands()[0]; + } + + inline const exprt &univ_upper_bound() const + { + return operands()[1]; + } + + inline const exprt &premise() const + { + return operands()[2]; + } + + inline const exprt &exists_lower_bound() const + { + return operands()[3]; + } + + inline const exprt &exists_upper_bound() const + { + return operands()[4]; + } + + inline const exprt &s0() const + { + return operands()[5]; + } + + inline const exprt &s1() const + { + return operands()[6]; + } }; +extern inline const string_not_contains_constraintt +&to_string_not_contains_constraint(const exprt &expr) +{ + assert(expr.id()==ID_string_not_contains_constraint + && expr.operands().size()==7); + return static_cast(expr); +} + +extern inline string_not_contains_constraintt +&to_string_not_contains_constraint(exprt &expr) +{ + assert(expr.id()==ID_string_not_contains_constraint + && expr.operands().size()==7); + return static_cast(expr); +} #endif diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 0b22113327e..0e20bd3ce48 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -116,7 +116,7 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine + "\nwhich is not a function application, a symbol or an if expression"); } - axioms.emplace_back(s.longer(refined_string_typet::index_zero())); + axioms.push_back(s.longer(refined_string_typet::index_zero())); return s; } @@ -130,16 +130,14 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); string_exprt f = string_of_expr(expr.false_case()); - axioms.emplace_back(expr.cond(),res.same_length(t)); + axioms.push_back(implies_exprt(expr.cond(),res.same_length(t))); symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); - axioms.push_back(string_constraintt(expr.cond(),equal_exprt(res[qvar],t[qvar]) - ).with_forall(qvar,t.length())); + axioms.push_back(string_constraintt(qvar,t.length(),expr.cond(),equal_exprt(res[qvar],t[qvar]))); - axioms.emplace_back(not_exprt(expr.cond()),res.same_length(f)); + axioms.push_back(implies_exprt(expr.cond(),res.same_length(f))); symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); - axioms.push_back(string_constraintt(not_exprt(expr.cond()), - equal_exprt(res[qvar2],f[qvar2]) - ).with_forall(qvar2,f.length())); + axioms.push_back(string_constraintt(qvar2,f.length(),not_exprt(expr.cond()), + equal_exprt(res[qvar2],f[qvar2]))); return res; } @@ -313,13 +311,13 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch std::string sval_binary=integer2binary((unsigned)utf16[i], char_width); constant_exprt c(sval_binary,char_type); equal_exprt lemma(res[idx], c); - axioms.emplace_back(lemma,true); + axioms.push_back(lemma); } std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); - axioms.emplace_back(res.has_length(s_length)); + axioms.push_back(res.has_length(s_length)); return res; } @@ -327,7 +325,7 @@ string_exprt string_constraint_generatort::empty_string(const function_applicati { assert(f.arguments().size() == 0); string_exprt res(get_char_type()); - axioms.emplace_back(res.has_length(0)); + axioms.push_back(res.has_length(0)); return res; } @@ -376,19 +374,19 @@ string_exprt string_constraint_generatort::string_concat(const string_exprt & s1 { // |res| = |s1| + |s2| string_exprt res(get_char_type()); - axioms.emplace_back(res.has_length(plus_exprt(s1.length(), s2.length()))); - axioms.emplace_back(s1.shorter(res)); // we have to be careful about very long strings - axioms.emplace_back(s2.shorter(res)); + axioms.push_back(res.has_length(plus_exprt(s1.length(), s2.length()))); + axioms.push_back(s1.shorter(res)); // we have to be careful about very long strings + axioms.push_back(s2.shorter(res)); // forall i<|s1|. res[i] = s1[i] symbol_exprt idx = fresh_univ_index("QA_index_concat"); - string_constraintt a1(equal_exprt(s1[idx],res[idx])); - axioms.push_back(a1.with_forall(idx, s1.length())); + string_constraintt a1(idx,s1.length(),equal_exprt(s1[idx],res[idx])); + axioms.push_back(a1); // forall i<|s2|. res[i+|s1|] = s2[i] symbol_exprt idx2 = fresh_univ_index("QA_index_concat2"); - string_constraintt a2(equal_exprt(s2[idx2],res[plus_exprt(idx2,s1.length())])); - axioms.push_back(a2.with_forall(idx2, s2.length())); + string_constraintt a2(idx2, s2.length(),equal_exprt(s2[idx2],res[plus_exprt(idx2,s1.length())])); + axioms.push_back(a2); return res; } @@ -410,10 +408,10 @@ string_exprt string_constraint_generatort::string_copy(const function_applicatio { string_exprt s1 = string_of_expr(args(f,1)[0]); string_exprt res(get_char_type()); - axioms.emplace_back(res.same_length(s1)); + axioms.push_back(res.same_length(s1)); symbol_exprt idx = fresh_univ_index("QA_index_copy"); - string_constraintt a1(equal_exprt(s1[idx],res[idx])); - axioms.push_back(a1.with_forall(idx, s1.length())); + string_constraintt a1(idx, s1.length(), equal_exprt(s1[idx],res[idx])); + axioms.push_back(a1); return res; } @@ -426,12 +424,12 @@ string_exprt string_constraint_generatort::string_set_length(const function_appl // |s| = k // && forall i < k. (i < k ==> s[i] = s1[i]) && (i >= k ==> s[i] = 0) - axioms.emplace_back(res.has_length(k)); + axioms.push_back(res.has_length(k)); symbol_exprt idx = fresh_univ_index("QA_index_set_length"); string_constraintt a1 - (and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), - implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); - axioms.push_back(a1.with_forall(idx, k)); + (idx, k, and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), + implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); + axioms.push_back(a1); return res; } @@ -459,10 +457,10 @@ string_exprt string_constraint_generatort::string_value_of(const function_applic exprt offset = args[1]; exprt count = args[2]; string_exprt str = java_char_array(char_array); - axioms.emplace_back(res.has_length(count)); + axioms.push_back(res.has_length(count)); symbol_exprt idx = fresh_univ_index("QA_index_value_of"); - string_constraintt a1(equal_exprt(str[plus_exprt(idx,offset)],res[idx])); - axioms.push_back(a1.with_forall(idx, count)); + string_constraintt a1(idx, count, equal_exprt(str[plus_exprt(idx,offset)],res[idx])); + axioms.push_back(a1); return res; } else @@ -492,14 +490,17 @@ string_exprt string_constraint_generatort::string_substring assert(end.type() == refined_string_typet::index_type()); string_exprt res(get_char_type()); - axioms.emplace_back(binary_relation_exprt(start, ID_lt, end),res.has_length(minus_exprt(end, start))); - axioms.emplace_back(binary_relation_exprt(start, ID_ge, end),res.has_length(refined_string_typet::index_zero())); + axioms.push_back(implies_exprt(binary_relation_exprt(start, ID_lt, end), + res.has_length(minus_exprt(end, start)))); + axioms.push_back(implies_exprt(binary_relation_exprt(start, ID_ge, end), + res.has_length(refined_string_typet::index_zero()))); // Warning: check what to do if the string is not long enough - axioms.emplace_back(str.longer(end)); + axioms.push_back(str.longer(end)); // forall idx < str.length, str[idx] = arg_str[idx+i] - string_constraintt a(equal_exprt(res[idx], str[plus_exprt(start, idx)])); - axioms.push_back(a.with_forall(idx,res.length())); + string_constraintt a(idx, res.length(), + equal_exprt(res[idx], str[plus_exprt(start, idx)])); + axioms.push_back(a); return res; } @@ -512,26 +513,27 @@ string_exprt string_constraint_generatort::string_trim exprt space_char = constant_char(32); // m + |s1| <= |str| - axioms.emplace_back(str.longer(plus_exprt(idx, res.length()))); - axioms.emplace_back(binary_relation_exprt(idx, ID_ge, refined_string_typet::index_zero())); - axioms.emplace_back(str.longer(idx)); - axioms.emplace_back(res.longer(refined_string_typet::index_zero())); - axioms.emplace_back(res.shorter(str)); // necessary to prevent exceeding the biggest integer + axioms.push_back(str.longer(plus_exprt(idx, res.length()))); + axioms.push_back(binary_relation_exprt(idx, ID_ge, refined_string_typet::index_zero())); + axioms.push_back(str.longer(idx)); + axioms.push_back(res.longer(refined_string_typet::index_zero())); + axioms.push_back(res.shorter(str)); // necessary to prevent exceeding the biggest integer symbol_exprt n = fresh_univ_index("QA_index_trim"); // forall n < m, str[n] = ' ' - string_constraintt a(equal_exprt(str[n], space_char)); - axioms.push_back(a.with_forall(n,idx)); + string_constraintt a(n,idx,equal_exprt(str[n], space_char)); + axioms.push_back(a); symbol_exprt n2 = fresh_univ_index("QA_index_trim2"); // forall n < |str|-m-|s1|, str[m+|s1|+n] = ' ' - string_constraintt a1(equal_exprt(str[plus_exprt(idx,plus_exprt(res.length(),n2))], space_char)); - axioms.push_back(a1.with_forall(n2,minus_exprt(str.length(),plus_exprt(idx,res.length())))); + minus_exprt bound(str.length(),plus_exprt(idx,res.length())); + string_constraintt a1(n2,bound, equal_exprt(str[plus_exprt(idx,plus_exprt(res.length(),n2))], space_char)); + axioms.push_back(a1); symbol_exprt n3 = fresh_univ_index("QA_index_trim3"); // forall n < |s1|, s[idx+n] = s1[n] - string_constraintt a2(equal_exprt(res[n3], str[plus_exprt(n3, idx)])); - axioms.push_back(a2.with_forall(n3,res.length())); + string_constraintt a2(n3,res.length(),equal_exprt(res[n3], str[plus_exprt(n3, idx)])); + axioms.push_back(a2); // (s[m] != ' ' && s[m+|s1|-1] != ' ') || m = |s| or_exprt m_index_condition(equal_exprt(idx,str.length()), and_exprt @@ -551,7 +553,7 @@ string_exprt string_constraint_generatort::string_to_lower_case exprt char_z = constant_char(122); exprt char_Z = constant_char(90); - axioms.emplace_back(res.same_length(str)); + axioms.push_back(res.same_length(str)); symbol_exprt idx = fresh_univ_index("QA_lower_case"); // forall idx < str.length, this[idx] = 'A'<=str[idx]<='Z' ? str[idx]+'a'-'A' : str[idx] @@ -559,8 +561,8 @@ string_exprt string_constraint_generatort::string_to_lower_case binary_relation_exprt(str[idx],ID_le,char_Z)); equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_a,char_A))); equal_exprt eq(res[idx], str[idx]); - string_constraintt a(and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); - axioms.push_back(a.with_forall(idx,res.length())); + string_constraintt a(idx,res.length(),and_exprt(implies_exprt(is_upper_case,convert),implies_exprt(not_exprt(is_upper_case),eq))); + axioms.push_back(a); return res; } @@ -575,7 +577,7 @@ string_exprt string_constraint_generatort::string_to_upper_case exprt char_z = constant_char(122); exprt char_Z = constant_char(90); - axioms.emplace_back(res.same_length(str)); + axioms.push_back(res.same_length(str)); symbol_exprt idx = fresh_univ_index("QA_upper_case"); // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] @@ -583,8 +585,8 @@ string_exprt string_constraint_generatort::string_to_upper_case binary_relation_exprt(str[idx],ID_le,char_z)); equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); equal_exprt eq(res[idx], str[idx]); - string_constraintt a(and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); - axioms.push_back(a.with_forall(idx,res.length())); + string_constraintt a(idx,res.length(),and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); + axioms.push_back(a); return res; } @@ -613,7 +615,7 @@ string_exprt string_constraint_generatort::of_float size_t char_width = get_char_width(); string_exprt res(char_type); - axioms.emplace_back(res.shorter(refined_string_typet::index_of_int(24))); + axioms.push_back(res.shorter(refined_string_typet::index_of_int(24))); string_exprt magnitude(char_type); @@ -625,11 +627,11 @@ string_exprt string_constraint_generatort::of_float ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); exprt isnan = float_bvt().isnan(f,fspec); - axioms.emplace_back(isnan, magnitude.same_length(nan_string)); + axioms.push_back(implies_exprt(isnan, magnitude.same_length(nan_string))); symbol_exprt qvar = fresh_univ_index("QA_equal_nan"); axioms.push_back - (string_constraintt(isnan,equal_exprt(magnitude[qvar],nan_string[qvar]) - ).with_forall(qvar,nan_string.length())); + (string_constraintt(qvar, nan_string.length(), + isnan, equal_exprt(magnitude[qvar],nan_string[qvar]))); // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. @@ -637,30 +639,29 @@ string_exprt string_constraint_generatort::of_float unsigned width=bv_type.get_width(); exprt isneg = extractbit_exprt(f, width-1); - axioms.emplace_back(isneg, sign_string.has_length(1)); + axioms.push_back(implies_exprt(isneg, sign_string.has_length(1))); - axioms.emplace_back(not_exprt(isneg), sign_string.has_length(0)); - axioms.emplace_back(isneg,equal_exprt(sign_string[0], constant_char(0x2D))); + axioms.push_back(implies_exprt(not_exprt(isneg), sign_string.has_length(0))); + axioms.push_back(implies_exprt(isneg,equal_exprt(sign_string[0], constant_char(0x2D)))); // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". string_exprt infinity_string = string_constant("Infinity",char_width,char_type); exprt isinf = float_bvt().isinf(f,fspec); - axioms.emplace_back(isinf, magnitude.same_length(infinity_string)); + axioms.push_back(implies_exprt(isinf, magnitude.same_length(infinity_string))); symbol_exprt qvar_inf = fresh_univ_index("QA_equal_infinity"); axioms.push_back - (string_constraintt(isinf,equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]) - ).with_forall(qvar_inf,infinity_string.length())); + (string_constraintt(qvar_inf, infinity_string.length(), + isinf, equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]))); //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". - string_exprt zero_string = string_constant("0.0",char_width,char_type); + string_exprt zero_string = string_constant("0.0", char_width, char_type); exprt iszero = float_bvt().is_zero(f,fspec); - axioms.emplace_back(iszero, magnitude.same_length(zero_string)); + axioms.push_back(implies_exprt(iszero, magnitude.same_length(zero_string))); symbol_exprt qvar_zero = fresh_univ_index("QA_equal_zero"); axioms.push_back - (string_constraintt(iszero,equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]) - ).with_forall(qvar_zero,zero_string.length())); + (string_constraintt(qvar_zero, zero_string.length(), iszero, equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]))); return string_concat(sign_string,magnitude); } @@ -684,17 +685,15 @@ string_exprt string_constraint_generatort::of_bool(const exprt &i) string_exprt true_string = string_constant("true",char_width,char_type); string_exprt false_string = string_constant("false",char_width,char_type); - axioms.emplace_back(eq, res.same_length(true_string)); + axioms.push_back(implies_exprt(eq, res.same_length(true_string))); symbol_exprt qvar = fresh_univ_index("QA_equal_true"); axioms.push_back - (string_constraintt(eq,equal_exprt(res[qvar],true_string[qvar]) - ).with_forall(qvar,true_string.length())); + (string_constraintt(qvar,true_string.length(),eq,equal_exprt(res[qvar],true_string[qvar]))); - axioms.emplace_back(not_exprt(eq), res.same_length(false_string)); + axioms.push_back(implies_exprt(not_exprt(eq), res.same_length(false_string))); symbol_exprt qvar1 = fresh_univ_index("QA_equal_false"); axioms.push_back - (string_constraintt(not_exprt(eq),equal_exprt(res[qvar1],false_string[qvar1]) - ).with_forall(qvar,false_string.length())); + (string_constraintt(qvar,false_string.length(),not_exprt(eq),equal_exprt(res[qvar1],false_string[qvar1]))); return res; } @@ -712,15 +711,15 @@ string_exprt string_constraint_generatort::of_int exprt nine_char = constant_char('9'); exprt minus_char = constant_char('-'); - axioms.emplace_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), - res.shorter(refined_string_typet::index_of_int(max_size)))); + axioms.push_back(and_exprt(res.strictly_longer(refined_string_typet::index_zero()), + res.shorter(refined_string_typet::index_of_int(max_size)))); exprt chr = res[0]; exprt starts_with_minus = equal_exprt(chr,minus_char); exprt starts_with_digit = and_exprt (binary_relation_exprt(chr,ID_ge,zero_char), binary_relation_exprt(chr,ID_le,nine_char)); - axioms.emplace_back(or_exprt(starts_with_digit,starts_with_minus)); + axioms.push_back(or_exprt(starts_with_digit,starts_with_minus)); for(size_t size=1; size<=max_size;size++) { @@ -740,20 +739,23 @@ string_exprt string_constraint_generatort::of_int } equal_exprt premise = res.has_length(size); - axioms.emplace_back(and_exprt(premise,starts_with_digit), - and_exprt(equal_exprt(i,plus_exprt(sum,first_value)), - all_numbers)); - - axioms.emplace_back(and_exprt(premise,starts_with_minus), - and_exprt(equal_exprt(i,unary_minus_exprt(sum)), - all_numbers)); + axioms.push_back(implies_exprt(and_exprt(premise,starts_with_digit), + and_exprt(equal_exprt(i,plus_exprt(sum,first_value)), + all_numbers))); + + axioms.push_back(implies_exprt + (and_exprt(premise,starts_with_minus), + and_exprt(equal_exprt(i,unary_minus_exprt(sum)), + all_numbers))); //disallow 0s at the beggining if(size>1) { - axioms.emplace_back(and_exprt(premise,starts_with_digit), - not_exprt(equal_exprt(res[refined_string_typet::index_zero()],zero_char))); - axioms.emplace_back(and_exprt(premise,starts_with_minus), - not_exprt(equal_exprt(res[refined_string_typet::index_of_int(1)],zero_char))); + axioms.push_back(implies_exprt + (and_exprt(premise,starts_with_digit), + not_exprt(equal_exprt(res[refined_string_typet::index_zero()],zero_char)))); + axioms.push_back(implies_exprt + (and_exprt(premise,starts_with_minus), + not_exprt(equal_exprt(res[refined_string_typet::index_of_int(1)],zero_char)))); } //we have to be careful when exceeding the maximal size of integers @@ -761,7 +763,9 @@ string_exprt string_constraint_generatort::of_int if(size == max_size) { exprt smallest_with_10_digits = constant_signed(1000000000,width); - axioms.emplace_back(premise,binary_relation_exprt(i,ID_ge,smallest_with_10_digits)); + axioms.push_back(implies_exprt + (premise, binary_relation_exprt + (i,ID_ge,smallest_with_10_digits))); } } return res; @@ -793,8 +797,8 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) exprt f_char = constant_char(0x66); size_t max_size = 8; - axioms.emplace_back(and_exprt(res.strictly_longer(0), - res.shorter(max_size))); + axioms.push_back(and_exprt(res.strictly_longer(0), + res.shorter(max_size))); for(size_t size=1; size<=max_size;size++) { @@ -817,11 +821,11 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) } equal_exprt premise(res.has_length(size)); - axioms.emplace_back(premise, and_exprt(equal_exprt(i,sum),all_numbers)); + axioms.push_back(implies_exprt(premise, and_exprt(equal_exprt(i,sum),all_numbers))); //disallow 0s at the beggining if(size>1) - axioms.emplace_back(premise, not_exprt(equal_exprt(res[0],zero_char))); + axioms.push_back(implies_exprt(premise, not_exprt(equal_exprt(res[0],zero_char)))); } return res; } @@ -850,24 +854,25 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) assert(type.id() == ID_signedbv); size_t width = to_bitvector_type(type).get_width(); binary_relation_exprt small(code_point,ID_lt,constant_signed(0x010000,width)); - axioms.emplace_back(small, res.has_length(1)); - axioms.emplace_back(not_exprt(small),res.has_length(2)); - axioms.emplace_back(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type()))); - - axioms.emplace_back(not_exprt(small), - equal_exprt - (res[0], - typecast_exprt - (plus_exprt(constant_signed(0xD800,width), - div_exprt(minus_exprt(code_point,constant_signed(0x010000,width)),constant_signed(0x0400,width))), - get_char_type()))); - axioms.emplace_back(not_exprt(small), - equal_exprt - (res[1], - typecast_exprt - (plus_exprt(constant_signed(0xDC00,width), - mod_exprt(code_point,constant_signed(0x0400,width))), - get_char_type()))); + axioms.push_back(implies_exprt(small, res.has_length(1))); + axioms.push_back(implies_exprt(not_exprt(small),res.has_length(2))); + axioms.push_back(implies_exprt(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type())))); + + axioms.push_back + (implies_exprt + (not_exprt(small), + equal_exprt(res[0], + typecast_exprt + (plus_exprt(constant_signed(0xD800,width), + div_exprt(minus_exprt(code_point,constant_signed(0x010000,width)),constant_signed(0x0400,width))), + get_char_type())))); + axioms.push_back + (implies_exprt + (not_exprt(small), + equal_exprt(res[1],typecast_exprt + (plus_exprt(constant_signed(0xDC00,width), + mod_exprt(code_point,constant_signed(0x0400,width))), + get_char_type())))); return res; } @@ -893,16 +898,15 @@ string_exprt string_constraint_generatort::string_replace exprt newChar = args(f,3)[2]; string_exprt res(get_char_type()); - axioms.emplace_back(res.same_length(str)); + axioms.push_back(res.same_length(str)); symbol_exprt qvar = fresh_univ_index("QA_replace"); axioms.push_back (string_constraintt - (and_exprt + (qvar,res.length(), + and_exprt (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt(res[qvar],newChar)), implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), - equal_exprt(res[qvar],str[qvar])) - ) - ).with_forall(qvar,res.length())); + equal_exprt(res[qvar],str[qvar]))))); return res; } @@ -1076,15 +1080,17 @@ exprt string_constraint_generatort::string_equal symbol_exprt witness = fresh_exist_index("witness_unequal"); symbol_exprt qvar = fresh_univ_index("QA_equal"); - axioms.emplace_back(eq, s1.same_length(s2)); + axioms.push_back(implies_exprt(eq, s1.same_length(s2))); axioms.push_back - (string_constraintt(eq,equal_exprt(s1[qvar],s2[qvar]) - ).with_forall(qvar,s1.length())); + (string_constraintt(qvar,s1.length(),eq,equal_exprt(s1[qvar],s2[qvar]))); - axioms.emplace_back - (not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(notequal_exprt(s1[witness],s2[witness])).with_exists(witness,s1.length()))); + and_exprt witnessing(binary_relation_exprt(witness,ID_lt,s1.length()), + and_exprt(binary_relation_exprt(witness,ID_ge,refined_string_typet::index_zero()), + notequal_exprt(s1[witness],s2[witness]))); + axioms.push_back + (implies_exprt(not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + witnessing))); return tc_eq; } @@ -1119,16 +1125,19 @@ exprt string_constraint_generatort::string_equals_ignore_case symbol_exprt witness = fresh_exist_index("witness_unequal_ignore_case"); symbol_exprt qvar = fresh_univ_index("QA_equal_ignore_case"); - axioms.emplace_back(eq, s1.same_length(s2)); + axioms.push_back(implies_exprt(eq, s1.same_length(s2))); axioms.push_back - (string_constraintt(eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z) - ).with_forall(qvar,s1.length())); + (string_constraintt(qvar,s1.length(),eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z))); - axioms.emplace_back - (not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - string_constraintt(not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))).with_exists(witness,s1.length()))); + axioms.push_back + (implies_exprt + (not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + and_exprt(binary_relation_exprt(witness,ID_lt,s1.length()), + and_exprt(binary_relation_exprt(witness,ID_ge, + refined_string_typet::index_zero()), + not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))))))); return tc_eq; } @@ -1160,8 +1169,8 @@ exprt string_constraint_generatort::string_data ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), get_char_type()); - string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.with_forall(qvar,str.length())); + string_constraintt eq(qvar,str.length(),equal_exprt(str[qvar],char_in_tab)); + axioms.push_back(eq); exprt void_expr; void_expr.type() = void_typet(); @@ -1177,9 +1186,9 @@ string_exprt string_constraint_generatort::of_char_array assert(char_in_tab.id() == ID_index); char_in_tab.op1() = plus_exprt(qvar,offset); - string_constraintt eq(equal_exprt(str[qvar],char_in_tab)); - axioms.push_back(eq.with_forall(qvar,count)); - axioms.emplace_back(equal_exprt(str.length(),count)); + string_constraintt eq(qvar,count,equal_exprt(str[qvar],char_in_tab)); + axioms.push_back(eq); + axioms.push_back(equal_exprt(str.length(),count)); return str; } @@ -1238,13 +1247,12 @@ exprt is_positive(const exprt & x) exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) { symbol_exprt isprefix = fresh_boolean("isprefix"); - axioms.emplace_back(isprefix, str.longer(plus_exprt(prefix.length(),offset))); + axioms.push_back(implies_exprt(isprefix, str.longer(plus_exprt(prefix.length(),offset)))); // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] symbol_exprt qvar = fresh_univ_index("QA_isprefix"); axioms.push_back - (string_constraintt(isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]) - ).with_forall(qvar,prefix.length())); + (string_constraintt(qvar,prefix.length(),isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]))); symbol_exprt witness = fresh_exist_index("witness_not_isprefix"); @@ -1255,7 +1263,7 @@ exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, and_exprt(prefix.strictly_longer(witness), notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); - axioms.emplace_back(implies_exprt(not_exprt(isprefix),s0_notpref_s1)); + axioms.push_back(implies_exprt(not_exprt(isprefix),s0_notpref_s1)); return isprefix; } @@ -1278,8 +1286,8 @@ exprt string_constraint_generatort::string_is_empty assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt is_empty = fresh_boolean("is_empty"); string_exprt s0 = string_of_expr(args(f,1)[0]); - axioms.emplace_back(implies_exprt(is_empty, s0.has_length(0))); - axioms.emplace_back(implies_exprt(s0.has_length(0),is_empty)); + axioms.push_back(implies_exprt(is_empty, s0.has_length(0))); + axioms.push_back(implies_exprt(s0.has_length(0),is_empty)); return typecast_exprt(is_empty,f.type()); } @@ -1302,14 +1310,13 @@ exprt string_constraint_generatort::string_is_suffix // && !issuffix => s1.length > s0.length // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - axioms.emplace_back(implies_exprt(issuffix, s1.longer(s0))); + axioms.push_back(implies_exprt(issuffix, s1.longer(s0))); symbol_exprt qvar = fresh_univ_index("QA_suffix"); exprt qvar_shifted = plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); axioms.push_back - (string_constraintt(issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]) - ).with_forall(qvar,s0.length())); + (string_constraintt(qvar, s0.length(), issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]))); symbol_exprt witness = fresh_exist_index("witness_not_suffix"); @@ -1322,7 +1329,7 @@ exprt string_constraint_generatort::string_is_suffix and_exprt(s0.strictly_longer(witness), notequal_exprt(s0[witness],s1[shifted]))))); - axioms.emplace_back(lemma2); + axioms.push_back(lemma2); return tc_issuffix; } @@ -1345,22 +1352,21 @@ exprt string_constraint_generatort::string_contains // || (forall startpos <= s0.length - s1.length. // exists witness < s1.length && s1[witness] != s0[witness + startpos] - axioms.emplace_back(implies_exprt(contains, s0.longer(s1))); + axioms.push_back(implies_exprt(contains, s0.longer(s1))); symbol_exprt startpos = fresh_exist_index("startpos_contains"); - axioms.emplace_back( + axioms.push_back( and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); symbol_exprt qvar = fresh_univ_index("QA_contains"); exprt qvar_shifted = plus_exprt(qvar, startpos); axioms.push_back - (string_constraintt(contains,equal_exprt(s1[qvar],s0[qvar_shifted]) - ).with_forall(qvar,s1.length())); + (string_constraintt(qvar,s1.length(),contains,equal_exprt(s1[qvar],s0[qvar_shifted]))); // We rewrite the axiom for !contains as: // forall startpos <= |s0| - |s1|. (!contains && |s0| >= |s1| ) // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] axioms.push_back - (string_constraintt::create_not_contains + (string_not_contains_constraintt (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), and_exprt(not_exprt(contains),s0.longer(s1)),refined_string_typet::index_zero(),s1.length(),s0,s1)); @@ -1386,7 +1392,7 @@ exprt string_constraint_generatort::string_hash_code(const function_application_ for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) { symbol_exprt i = fresh_exist_index("index_hash"); - axioms.emplace_back + axioms.push_back (or_exprt (equal_exprt(hash[it->second],hash[str]), or_exprt @@ -1409,21 +1415,24 @@ exprt string_constraint_generatort::string_index_of // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) // && forall n. from_index <= n < i => s[n] != c - axioms.push_back(string_constraintt - (equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains) - ).with_exists(index,refined_string_typet::index_of_int(-1),str.length())); - axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - axioms.emplace_back(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c))); + axioms.push_back + ( + and_exprt(implies_exprt + (equal_exprt(index,refined_string_typet::index_of_int(-1)), + not_exprt(contains)), + and_exprt(binary_relation_exprt(index,ID_ge,refined_string_typet::index_of_int(-1)), + binary_relation_exprt(index,ID_lt,str.length())))); + axioms.push_back(implies_exprt(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1)))); + axioms.push_back(implies_exprt(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c)))); symbol_exprt n = fresh_univ_index("QA_index_of"); axioms.push_back(string_constraintt - (contains,not_exprt(equal_exprt(str[n],c))).with_forall(n,from_index,index)); + (n,from_index,index,contains,not_exprt(equal_exprt(str[n],c)))); symbol_exprt m = fresh_univ_index("QA_index_of"); axioms.push_back(string_constraintt - (not_exprt(contains),not_exprt(equal_exprt(str[m],c)) - ).with_forall(m,from_index,str.length())); + (m,from_index,str.length(),not_exprt(contains),not_exprt(equal_exprt(str[m],c)))); return index; } @@ -1432,17 +1441,16 @@ exprt string_constraint_generatort::string_index_of_string(const string_exprt &s { symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); - axioms.emplace_back(contains, and_exprt - (str.longer(plus_exprt(substring.length(),offset)), - binary_relation_exprt(offset,ID_ge,from_index))); - axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + axioms.push_back(implies_exprt(contains, and_exprt + (str.longer(plus_exprt(substring.length(),offset)), + binary_relation_exprt(offset,ID_ge,from_index)))); + axioms.push_back(implies_exprt(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1)))); // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back - (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).with_forall(qvar,substring.length())); - + (string_constraintt(qvar, substring.length(), contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]))); + return offset; } @@ -1450,16 +1458,15 @@ exprt string_constraint_generatort::string_last_index_of_string(const string_exp { symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); - axioms.emplace_back(contains, and_exprt - (str.longer(plus_exprt(substring.length(),offset)), - binary_relation_exprt(offset,ID_le,from_index))); - axioms.emplace_back(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1))); + axioms.push_back(implies_exprt(contains, and_exprt + (str.longer(plus_exprt(substring.length(),offset)), + binary_relation_exprt(offset,ID_le,from_index)))); + axioms.push_back(implies_exprt(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1)))); // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back - (string_constraintt(contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]) - ).with_forall(qvar,substring.length())); + (string_constraintt(qvar, substring.length(), contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]))); return offset; } @@ -1497,15 +1504,21 @@ exprt string_constraint_generatort::string_last_index_of // && forall n. i <= n <= from_index => s[n] != c exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); - axioms.push_back(string_constraintt(equal_exprt(index,refined_string_typet::index_of_int(-1)),not_exprt(contains)).with_exists(index,refined_string_typet::index_of_int(-1),from_index_plus_one)); - axioms.emplace_back(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1))); - axioms.emplace_back(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c)))); + axioms.push_back + (implies_exprt(equal_exprt(index,refined_string_typet::index_of_int(-1)), + and_exprt(not_exprt(contains), + and_exprt(binary_relation_exprt + (index,ID_ge,refined_string_typet::index_of_int(-1)), + binary_relation_exprt + (index,ID_lt,from_index_plus_one))))); + axioms.push_back(implies_exprt(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1)))); + axioms.push_back(implies_exprt(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c))))); symbol_exprt n = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(contains,not_exprt(equal_exprt(str[n],c))).with_forall(n,plus_exprt(index,refined_string_typet::index_of_int(1)),from_index_plus_one)); + axioms.push_back(string_constraintt(n, plus_exprt(index,refined_string_typet::index_of_int(1)), from_index_plus_one, contains, not_exprt(equal_exprt(str[n],c)))); symbol_exprt m = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(not_exprt(contains),not_exprt(equal_exprt(str[m],c))).with_forall(m,from_index_plus_one)); + axioms.push_back(string_constraintt(m, from_index_plus_one, not_exprt(contains),not_exprt(equal_exprt(str[m],c)))); return index; } @@ -1519,8 +1532,10 @@ exprt string_constraint_generatort::string_last_index_of exprt c = args[1]; exprt from_index; - if(args.size() == 2) from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); - else if (args.size() == 3) from_index = args[2]; + if(args.size() == 2) + from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); + else if (args.size() == 3) + from_index = args[2]; else assert(false); if(refined_string_typet::is_java_string_type(c.type())) @@ -1566,7 +1581,7 @@ exprt string_constraint_generatort::string_char_at { string_exprt str = string_of_expr(args(f,2)[0]); symbol_exprt char_sym = string_exprt::fresh_symbol("char",get_char_type()); - axioms.emplace_back(equal_exprt(char_sym,str[args(f,2)[1]])); + axioms.push_back(equal_exprt(char_sym,str[args(f,2)[1]])); return char_sym; } @@ -1601,12 +1616,12 @@ exprt string_constraint_generatort::string_parse_int } equal_exprt premise = str.has_length(size); - axioms.emplace_back(and_exprt(premise,starts_with_digit), - equal_exprt(i,plus_exprt(sum,first_value))); - axioms.emplace_back(and_exprt(premise,starts_with_plus), - equal_exprt(i,sum)); - axioms.emplace_back(and_exprt(premise,starts_with_minus), - equal_exprt(i,unary_minus_exprt(sum))); + axioms.push_back(implies_exprt(and_exprt(premise,starts_with_digit), + equal_exprt(i,plus_exprt(sum,first_value)))); + axioms.push_back(implies_exprt(and_exprt(premise,starts_with_plus), + equal_exprt(i,sum))); + axioms.push_back(implies_exprt(and_exprt(premise,starts_with_minus), + equal_exprt(i,unary_minus_exprt(sum)))); } return i; } @@ -1651,8 +1666,8 @@ exprt string_constraint_generatort::string_code_point_at exprt return_pair = and_exprt(is_high_surrogate(str[pos]), is_low_surrogate(str[plus_exprt(pos,refined_string_typet::index_of_int(1))])); - axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); - axioms.emplace_back(not_exprt(return_pair), equal_exprt(result,char1_as_int)); + axioms.push_back(implies_exprt(return_pair,equal_exprt(result,pair_value))); + axioms.push_back(implies_exprt(not_exprt(return_pair), equal_exprt(result,char1_as_int))); return result; } @@ -1684,9 +1699,9 @@ exprt string_constraint_generatort::string_code_point_before exprt return_pair = and_exprt(is_high_surrogate(char1),is_low_surrogate(char2)); - axioms.emplace_back(return_pair,equal_exprt(result,pair_value)); - axioms.emplace_back(not_exprt(return_pair), - equal_exprt(result,char2_as_int)); + axioms.push_back(implies_exprt(return_pair,equal_exprt(result,pair_value))); + axioms.push_back(implies_exprt(not_exprt(return_pair), + equal_exprt(result,char2_as_int))); return result; } @@ -1699,8 +1714,8 @@ exprt string_constraint_generatort::string_code_point_count typet return_type = f.type(); symbol_exprt result = string_exprt::fresh_symbol("code_point_count",return_type); exprt length = minus_exprt(end,begin); - axioms.emplace_back(binary_relation_exprt(result,ID_le,length)); - axioms.emplace_back(binary_relation_exprt(result,ID_ge,div_exprt(length,refined_string_typet::index_of_int(2)))); + axioms.push_back(binary_relation_exprt(result,ID_le,length)); + axioms.push_back(binary_relation_exprt(result,ID_ge,div_exprt(length,refined_string_typet::index_of_int(2)))); return result; } @@ -1715,8 +1730,8 @@ exprt string_constraint_generatort::string_offset_by_code_point symbol_exprt result = string_exprt::fresh_symbol("offset_by_code_point",return_type); exprt minimum = plus_exprt(index,plus_exprt(index,offset)); exprt maximum = plus_exprt(index,plus_exprt(index,mult_exprt(offset,refined_string_typet::index_of_int(2)))); - axioms.emplace_back(binary_relation_exprt(result,ID_le,maximum)); - axioms.emplace_back(binary_relation_exprt(result,ID_ge,minimum)); + axioms.push_back(binary_relation_exprt(result,ID_le,maximum)); + axioms.push_back(binary_relation_exprt(result,ID_ge,minimum)); return result; } @@ -1758,9 +1773,9 @@ exprt string_constraint_generatort::string_compare_to symbol_exprt i = fresh_univ_index("QA_compare_to"); equal_exprt res_null = equal_exprt(res,constant_signed(0,width)); - axioms.emplace_back(res_null, s1.same_length(s2)); + axioms.push_back(implies_exprt(res_null, s1.same_length(s2))); axioms.push_back(string_constraintt - (res_null,equal_exprt(s1[i],s2[i])).with_forall(i,s1.length())); + (i,s1.length(),res_null,equal_exprt(s1[i],s2[i]))); symbol_exprt x = fresh_exist_index("index_compare_to"); axioms.push_back @@ -1782,7 +1797,7 @@ exprt string_constraint_generatort::string_compare_to and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); axioms.push_back(string_constraintt - (not_exprt(res_null),equal_exprt(s1[i],s2[i])).with_forall(i,x)); + (i, x, not_exprt(res_null),equal_exprt(s1[i],s2[i]))); return res; } @@ -1808,14 +1823,14 @@ symbol_exprt string_constraint_generatort::string_intern(const function_applicat for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); - axioms.emplace_back(disj); + axioms.push_back(disj); // WARNING: the specification may be incomplete or incorrect for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) if(it->second != str) { symbol_exprt i = fresh_exist_index("index_intern"); - axioms.emplace_back + axioms.push_back (or_exprt (equal_exprt(pool[it->second],pool[str]), or_exprt diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index a5884608956..dcae4556b73 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -24,7 +24,9 @@ class string_constraint_generatort { size_t get_char_width(); inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; - std::vector axioms; + // Axioms are of three kinds: universally quantified string constraint, + // not contains string constraints and simple formulas. + std::vector axioms; // Create a new string expression and add the necessary lemma // to ensure its equal to the given string expression. @@ -42,6 +44,14 @@ class string_constraint_generatort { // Symbols used in existential quantifications std::vector index_symbols; + // Used to store information about witnesses for not_contains constraints + std::map witness; + + // + inline exprt witness_of + (const string_not_contains_constraintt & c, const exprt & univ_val) const + { return index_exprt(witness.at(c), univ_val); } + symbol_exprt fresh_exist_index(const irep_idt &prefix); symbol_exprt fresh_univ_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 2d3b0dea3b2..b18f5c48165 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -72,8 +72,7 @@ void string_refinementt::add_instantiations() for (size_t k = 0; k < universal_axioms.size(); ++k) { assert(universal_axioms[k].is_univ_quant()); - string_constraintt lemma = instantiate(universal_axioms[k], s, val); - assert(lemma.is_simple()); + exprt lemma = instantiate(universal_axioms[k], s, val); add_lemma(lemma); } } @@ -169,24 +168,25 @@ decision_proceduret::resultt string_refinementt::dec_solve() print_time("string_refinementt::dec_solve"); for(unsigned i = 0; i < generator.axioms.size(); i++) - if(generator.axioms[i].is_simple()) - add_lemma(generator.axioms[i]); - else if(generator.axioms[i].is_string_constant()) - add_lemma(generator.axioms[i]); //,false); - else if(generator.axioms[i].is_univ_quant()) { - debug() << "universaly quantified : " << pretty_short(generator.axioms[i]) << eom; - universal_axioms.push_back(generator.axioms[i]); + if(generator.axioms[i].id() == ID_string_constraint) + { + debug() << "universaly quantified " << eom; + // << generator.axioms[i].pretty() << eom; + string_constraintt c= to_string_constraint(generator.axioms[i]); + universal_axioms.push_back(c); } - else { - assert(generator.axioms[i].is_not_contains()); - generator.axioms[i].witness = string_exprt::fresh_symbol + else if(generator.axioms[i].id() == ID_string_not_contains_constraint) + { + string_not_contains_constraintt axiom= + to_string_not_contains_constraint(generator.axioms[i]); + generator.witness[axiom] = string_exprt::fresh_symbol ("not_contains_witness", array_typet(refined_string_typet::index_type(), infinity_exprt(refined_string_typet::index_type()))); - not_contains_axioms.push_back(generator.axioms[i]); + not_contains_axioms.push_back(axiom); } - - //string_axioms.clear(); should not be necessary + else + add_lemma(generator.axioms[i]); initial_index_set(universal_axioms); debug() << "string_refinementt::dec_solve: warning update_index_set has to be checked" << eom; @@ -425,7 +425,7 @@ bool string_refinementt::check_axioms() debug() << "there are " << not_contains_axioms.size() << " not_contains axioms" << eom; for (size_t i = 0; i < not_contains_axioms.size(); ++i) { - exprt val = get(not_contains_axioms[i].witness_of(refined_string_typet::index_zero())); + exprt val = get(generator.witness_of(not_contains_axioms[i],refined_string_typet::index_zero())); violated.push_back(std::make_pair(i, val)); } @@ -652,7 +652,9 @@ void string_refinementt::initial_index_set(const string_constraintt &axiom) { // otherwise we add k-1 exprt e(i); - replace_expr(qvar,minus_exprt(axiom.univ_bound_sup(),refined_string_typet::index_of_int(1)),e); + replace_expr(qvar, + minus_exprt(axiom.upper_bound(), + refined_string_typet::index_of_int(1)),e); current_index_set[s].insert(e); index_set[s].insert(e); } @@ -723,26 +725,26 @@ exprt find_index(const exprt & expr, const exprt & str) { -string_constraintt string_refinementt::instantiate(const string_constraintt &axiom, +exprt string_refinementt::instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val) { assert(axiom.is_univ_quant()); exprt idx = find_index(axiom.body(),str); - if(idx.is_nil()) return string_constraintt(); - if(!find_qvar(idx,axiom.get_univ_var())) return string_constraintt(); + if(idx.is_nil()) return true_exprt(); + if(!find_qvar(idx,axiom.get_univ_var())) return true_exprt(); exprt r = compute_subst(axiom.get_univ_var(), val, idx); - exprt instance(axiom); + implies_exprt instance(axiom.premise(), axiom.body()); replace_expr(axiom.get_univ_var(), r, instance); // We are not sure the index set contains only positive numbers exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val)); replace_expr(axiom.get_univ_var(), r, bounds); - return string_constraintt(bounds,instance); + return implies_exprt(bounds,instance); } -void string_refinementt::instantiate_not_contains(const string_constraintt & axiom, std::vector & new_lemmas){ - assert(axiom.is_not_contains()); +void string_refinementt::instantiate_not_contains(const string_not_contains_constraintt & axiom, std::vector & new_lemmas) +{ exprt s0 = axiom.s0(); exprt s1 = axiom.s1(); @@ -754,16 +756,23 @@ void string_refinementt::instantiate_not_contains(const string_constraintt & axi for(expr_sett::iterator it1 = index_set1.begin(); it1 != index_set1.end(); it1++) { debug() << pretty_short(*it0) << " : " << pretty_short(*it1) << eom; - exprt val = minus_exprt(*it0,*it1); - exprt lemma = implies_exprt(and_exprt(axiom.premise(),equal_exprt(axiom.witness_of(val), *it1)), not_exprt(equal_exprt(to_string_expr(s0)[*it0],to_string_expr(s1)[*it1]))); + exprt val = minus_exprt(*it0, *it1); + exprt witness = generator.witness_of(axiom,val); + and_exprt prem_and_is_witness(axiom.premise(), + equal_exprt(witness, *it1)); + + not_exprt differ(equal_exprt(to_string_expr(s0)[*it0], + to_string_expr(s1)[*it1])); + exprt lemma = implies_exprt(prem_and_is_witness,differ); + new_lemmas.push_back(lemma); // we put bounds on the witnesses: 0 <= v <= |s0| - |s1| ==> 0 <= v+w[v] < |s0| && 0 <= w[v] < |s1| exprt witness_bounds = implies_exprt (and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), - and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,plus_exprt(val,axiom.witness_of(val))), - and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,axiom.witness_of(val))), - and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,axiom.witness_of(val)), - binary_relation_exprt(refined_string_typet::index_zero(),ID_le,axiom.witness_of(val)))))); + and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,plus_exprt(val,witness)), + and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,witness)), + and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,witness), + binary_relation_exprt(refined_string_typet::index_zero(),ID_le,witness))))); new_lemmas.push_back(witness_bounds); } } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 35e7dc0741a..c94efa50024 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -65,7 +65,7 @@ class string_refinementt: public bv_refinementt // std::vector universal_axioms; // - std::vector not_contains_axioms; + std::vector not_contains_axioms; int nb_sat_iteration; @@ -112,10 +112,12 @@ class string_refinementt: public bv_refinementt // Then substitutes [axiom.idx] with [r] in [axiom]. // axiom is not constant because we may record some information about // instantiation of existential variables. - string_constraintt instantiate(const string_constraintt &axiom, const exprt &str, + exprt instantiate(const string_constraintt &axiom, const exprt &str, const exprt &val); - void instantiate_not_contains(const string_constraintt &axiom, std::vector & new_lemmas); + void instantiate_not_contains + (const string_not_contains_constraintt &axiom, + std::vector & new_lemmas); // For expressions f of a certain form, // // returns an expression corresponding to $f^{−1}(val)$.// diff --git a/src/util/irep_ids.txt b/src/util/irep_ids.txt index 82ff934bd2f..ab78ba92528 100644 --- a/src/util/irep_ids.txt +++ b/src/util/irep_ids.txt @@ -733,3 +733,5 @@ verilog_array low high bswap +string_constraint +string_not_contains_constraint From 1035bd246f2ee26bbcd1b2fdd7fffe2a41fd53a9 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Mon, 12 Dec 2016 17:01:04 +0000 Subject: [PATCH 204/221] Removed previously commented code --- src/solvers/refinement/string_constraint.cpp | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 8f1c3503310..46c562146fc 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -9,23 +9,3 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include - -// string_constraintt::string_constraintt(const symbol_exprt & univ, const exprt & bound_inf, const exprt & bound_sup, const exprt &prem, const exprt &body) -// : string_constraintt(prem,body) -// { -// copy_to_operands(univ, bound_sup, bound_inf); -// } - -// string_constraintt string_constraintt::with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup) -// { -// assert(!is_univ_quant()); -// return string_constraintt -// (and_exprt(*this, -// and_exprt(binary_relation_exprt(exist, ID_ge, bound_inf), -// binary_relation_exprt(exist, ID_lt, bound_sup)))); -// } - -// string_constraintt string_constraintt::with_exists(const symbol_exprt & univ, const exprt & bound_sup) -// { -// return with_exists(univ,refined_string_typet::index_zero(),bound_sup); -// } From b049bc98a15f2907fe6bc408481d4f73b3d47937 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 09:31:25 +0000 Subject: [PATCH 205/221] Using from_integer for constant integer We use this instead of a previously defined equivalent that was only used in string_constraint_generator, that way we avoid duplicates. Removed unecessary width, fixed width problem in of_int_hex --- .../string_constraint_generator.cpp | 98 +++++++++---------- .../refinement/string_constraint_generator.h | 2 - 2 files changed, 44 insertions(+), 56 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 0e20bd3ce48..6075cb5b989 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -13,28 +13,22 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include +#include constant_exprt string_constraint_generatort::constant_char(int i) { switch(language) { case C : - return constant_exprt(integer2binary(i,STRING_SOLVER_C_CHAR_WIDTH), - refined_string_typet::char_type()); + return from_integer(i,refined_string_typet::char_type()); break; - case JAVA : return constant_exprt(integer2binary(i,STRING_SOLVER_JAVA_CHAR_WIDTH),refined_string_typet::java_char_type()); + case JAVA : + return from_integer(i,refined_string_typet::java_char_type()); break; default: assert(false); } } - -constant_exprt string_constraint_generatort::constant_unsigned(int i, size_t width) -{ return constant_exprt(integer2binary(i,width),unsignedbv_typet(width)); } - -constant_exprt string_constraint_generatort::constant_signed(int i, size_t width) -{ return constant_exprt(integer2binary(i,width),signedbv_typet(width)); } - void string_constraint_generatort::check_char_type(const exprt & str) { if(language == C) @@ -705,8 +699,7 @@ string_exprt string_constraint_generatort::of_int string_exprt res(get_char_type()); typet type = i.type(); assert(type.id() == ID_signedbv); - size_t width = to_bitvector_type(type).get_width(); - exprt ten = constant_signed(10,width); + exprt ten = from_integer(10,type); exprt zero_char = constant_char('0'); exprt nine_char = constant_char('9'); exprt minus_char = constant_char('-'); @@ -723,7 +716,7 @@ string_exprt string_constraint_generatort::of_int for(size_t size=1; size<=max_size;size++) { - exprt sum = constant_signed(0,width); + exprt sum = from_integer(0,type); exprt all_numbers = true_exprt(); chr = res[0]; exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); @@ -762,7 +755,7 @@ string_exprt string_constraint_generatort::of_int // Warning this should be different depending on max size if(size == max_size) { - exprt smallest_with_10_digits = constant_signed(1000000000,width); + exprt smallest_with_10_digits = from_integer(1000000000,type); axioms.push_back(implies_exprt (premise, binary_relation_exprt (i,ID_ge,smallest_with_10_digits))); @@ -774,9 +767,9 @@ string_exprt string_constraint_generatort::of_int exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_width, typet char_type) { - exprt zero_char = constant_char(48); - exprt nine_char = constant_char(57); - exprt a_char = constant_char(0x61); + exprt zero_char = constant_char('0'); + exprt nine_char = constant_char('9'); + exprt a_char = constant_char('a'); return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), minus_exprt(chr,constant_char(0x61 - 10)), minus_exprt(chr,zero_char)); @@ -788,13 +781,12 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) string_exprt res(get_char_type()); typet type = i.type(); assert(type.id() == ID_signedbv); - size_t width = to_bitvector_type(type).get_width(); - exprt sixteen = constant_signed(16,width); - exprt minus_char = constant_char(45); - exprt zero_char = constant_char(48); - exprt nine_char = constant_char(57); - exprt a_char = constant_char(0x61); - exprt f_char = constant_char(0x66); + exprt sixteen = from_integer(16,type); + exprt minus_char = constant_char('-'); + exprt zero_char = constant_char('0'); + exprt nine_char = constant_char('9'); + exprt a_char = constant_char('a'); + exprt f_char = constant_char('f'); size_t max_size = 8; axioms.push_back(and_exprt(res.strictly_longer(0), @@ -802,7 +794,7 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) for(size_t size=1; size<=max_size;size++) { - exprt sum = constant_signed(0,width); + exprt sum = from_integer(0,type); exprt all_numbers = true_exprt(); exprt chr = res[0]; @@ -853,7 +845,7 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) typet type = code_point.type(); assert(type.id() == ID_signedbv); size_t width = to_bitvector_type(type).get_width(); - binary_relation_exprt small(code_point,ID_lt,constant_signed(0x010000,width)); + binary_relation_exprt small(code_point,ID_lt,from_integer(0x010000,signedbv_typet(width))); axioms.push_back(implies_exprt(small, res.has_length(1))); axioms.push_back(implies_exprt(not_exprt(small),res.has_length(2))); axioms.push_back(implies_exprt(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type())))); @@ -863,15 +855,15 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) (not_exprt(small), equal_exprt(res[0], typecast_exprt - (plus_exprt(constant_signed(0xD800,width), - div_exprt(minus_exprt(code_point,constant_signed(0x010000,width)),constant_signed(0x0400,width))), + (plus_exprt(from_integer(0xD800,signedbv_typet(width)), + div_exprt(minus_exprt(code_point,from_integer(0x010000,signedbv_typet(width))),from_integer(0x0400,signedbv_typet(width)))), get_char_type())))); axioms.push_back (implies_exprt (not_exprt(small), equal_exprt(res[1],typecast_exprt - (plus_exprt(constant_signed(0xDC00,width), - mod_exprt(code_point,constant_signed(0x0400,width))), + (plus_exprt(from_integer(0xDC00,signedbv_typet(width)), + mod_exprt(code_point,from_integer(0x0400,signedbv_typet(width)))), get_char_type())))); return res; } @@ -1117,9 +1109,9 @@ exprt string_constraint_generatort::string_equals_ignore_case check_char_type(f); // is this necessary? - exprt char_a = constant_char(97); - exprt char_A = constant_char(65); - exprt char_Z = constant_char(90); + exprt char_a = constant_char('a'); + exprt char_A = constant_char('A'); + exprt char_Z = constant_char('Z'); string_exprt s1 = string_of_expr(args(f,2)[0]); string_exprt s2 = string_of_expr(args(f,2)[1]); symbol_exprt witness = fresh_exist_index("witness_unequal_ignore_case"); @@ -1162,11 +1154,11 @@ exprt string_constraint_generatort::string_data exprt char_in_tab = typecast_exprt (byte_extract_exprt(ID_byte_extract_little_endian,data, plus_exprt - (mult_exprt(constant_signed(2,64),typecast_exprt(qvar,signedbv_typet(64))), + (mult_exprt(from_integer(2,signedbv_typet(64)),typecast_exprt(qvar,signedbv_typet(64))), pointer_offset(byte_extract_exprt (ID_byte_extract_little_endian, tab_data - ,constant_signed(0,64),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), + ,from_integer(0,signedbv_typet(64)),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), get_char_type()); string_constraintt eq(qvar,str.length(),equal_exprt(str[qvar],char_in_tab)); @@ -1207,7 +1199,7 @@ string_exprt string_constraint_generatort::of_char_array { assert(f.arguments().size() == 2); count = f.arguments()[0]; - offset = constant_signed(0,32); + offset = from_integer(0,signedbv_typet(32)); } exprt tab_length = f.arguments()[0]; exprt data = f.arguments()[1]; @@ -1228,7 +1220,7 @@ string_exprt string_constraint_generatort::string_insert_char_array { assert(f.arguments().size() == 4); count = f.arguments()[2]; - offset = constant_signed(0,32); + offset = from_integer(0,signedbv_typet(32)); } string_exprt str = string_of_expr(f.arguments()[0]); @@ -1592,12 +1584,11 @@ exprt string_constraint_generatort::string_parse_int typet type = f.type(); symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); - exprt zero_char = constant_char(48); - exprt minus_char = constant_char(45); - exprt plus_char = constant_char(43); + exprt zero_char = constant_char('0'); + exprt minus_char = constant_char('-'); + exprt plus_char = constant_char('+'); assert(type.id() == ID_signedbv); - size_t width = to_bitvector_type(type).get_width(); - constant_exprt ten(integer2binary(10,width),type); + exprt ten=from_integer(10,type); exprt chr = str[0]; exprt starts_with_minus = equal_exprt(chr,minus_char); @@ -1606,7 +1597,7 @@ exprt string_constraint_generatort::string_parse_int for(unsigned size=1; size<=10;size++) { - exprt sum = constant_exprt(integer2binary(0,width),type); + exprt sum = from_integer(0,type); exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); for(unsigned j=1; j s1[i] = s2[i] assert(return_type.id() == ID_signedbv); - size_t width = to_bitvector_type(return_type).get_width(); symbol_exprt i = fresh_univ_index("QA_compare_to"); - equal_exprt res_null = equal_exprt(res,constant_signed(0,width)); + equal_exprt res_null = equal_exprt(res,from_integer(0,return_type)); axioms.push_back(implies_exprt(res_null, s1.same_length(s2))); axioms.push_back(string_constraintt (i,s1.length(),res_null,equal_exprt(s1[i],s2[i]))); @@ -1782,7 +1772,7 @@ exprt string_constraint_generatort::string_compare_to (implies_exprt (not_exprt(res_null), and_exprt - (binary_relation_exprt(x,ID_ge,constant_signed(0,width)), + (binary_relation_exprt(x,ID_ge,from_integer(0,return_type)), or_exprt (and_exprt (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index dcae4556b73..2f255bf45a4 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -18,8 +18,6 @@ class string_constraint_generatort { string_constraint_generatort() : language(UNKNOWN){ } constant_exprt constant_char(int i); - constant_exprt constant_unsigned(int i,size_t width); - constant_exprt constant_signed(int i,size_t width); unsignedbv_typet get_char_type(); size_t get_char_width(); inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; From 3c1daf04eed37dffe7e3f062c5bdcd7b900ba443 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 13:32:53 +0000 Subject: [PATCH 206/221] Function to detect and set the language for string refinement --- .../string_constraint_generator.cpp | 49 +++++-------------- .../refinement/string_constraint_generator.h | 18 ++++--- src/solvers/refinement/string_refinement.cpp | 19 +++++-- src/solvers/refinement/string_refinement.h | 3 ++ 4 files changed, 42 insertions(+), 47 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 6075cb5b989..ad951a681b8 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -17,47 +17,29 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com constant_exprt string_constraint_generatort::constant_char(int i) { - switch(language) - { - case C : - return from_integer(i,refined_string_typet::char_type()); - break; - case JAVA : - return from_integer(i,refined_string_typet::java_char_type()); - break; - default: assert(false); - } -} - -void string_constraint_generatort::check_char_type(const exprt & str) -{ - if(language == C) - assert(refined_string_typet::is_c_string_type(str.type())); - else - if(language == UNKNOWN) - { - if(refined_string_typet::is_c_string_type(str.type())) - language = C; - else - language = JAVA; - } - + if(mode==ID_C) + return from_integer(i,refined_string_typet::char_type()); + else if(mode==ID_java) + return from_integer(i,refined_string_typet::java_char_type()); + else assert(false); // only C and java modes supported } unsignedbv_typet string_constraint_generatort::get_char_type() { - if(language==C) + if(mode==ID_C) return refined_string_typet::char_type(); - else if(language==JAVA) return refined_string_typet::java_char_type(); - else assert(false); + else if(mode==ID_java) + return refined_string_typet::java_char_type(); + else assert(false); // only C and java modes supported } size_t string_constraint_generatort::get_char_width() { - if(language==C) + if(mode==ID_C) return STRING_SOLVER_C_CHAR_WIDTH; - else if(language==JAVA) return STRING_SOLVER_JAVA_CHAR_WIDTH; - else assert(false); + else if(mode==ID_java) + return STRING_SOLVER_JAVA_CHAR_WIDTH; + else assert(false); // only C and java modes supported } symbol_exprt string_constraint_generatort::fresh_univ_index(const irep_idt &prefix) @@ -84,8 +66,6 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine { string_exprt s; - check_char_type(unrefined_string); - if(unrefined_string.id() == ID_function_application) { exprt res = function_application(to_function_application_expr(unrefined_string)); @@ -1106,9 +1086,6 @@ exprt string_constraint_generatort::string_equals_ignore_case symbol_exprt eq = fresh_boolean("equal_ignore_case"); typecast_exprt tc_eq(eq,f.type()); - - check_char_type(f); // is this necessary? - exprt char_a = constant_char('a'); exprt char_A = constant_char('A'); exprt char_Z = constant_char('Z'); diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 2f255bf45a4..574aaf3855b 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -15,7 +15,15 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com class string_constraint_generatort { public: - string_constraint_generatort() : language(UNKNOWN){ } + string_constraint_generatort() : mode(ID_unknown) { } + + void set_mode(irep_idt _mode) + { + assert((_mode==ID_java)||(_mode==ID_C)); // only C and java modes supported + mode=_mode; + } + + inline irep_idt &get_mode() { return mode; } constant_exprt constant_char(int i); unsignedbv_typet get_char_type(); @@ -175,15 +183,9 @@ class string_constraint_generatort { // Warning: this does not work at the moment because of the way we treat string pointers symbol_exprt string_intern(const function_application_exprt &f); - // Check that the given string is from the right language - void check_char_type(const exprt & str); - private: - enum {C, JAVA, UNKNOWN} language; - - - inline bool use_c_string() {return (language == C);} + irep_idt mode; // assert that the number of argument is equal to nb and extract them inline function_application_exprt::argumentst args(const function_application_exprt &expr, size_t nb) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index b18f5c48165..0e377e712b0 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -36,6 +36,16 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): start_time = std::chrono::high_resolution_clock::now(); } +void string_refinementt::set_mode() +{ + debug() << "initializing mode" << eom; + // symbol_table.show(std::cout); + symbolt init = ns.lookup(irep_idt("__CPROVER_initialize")); + irep_idt mode = init.mode; + debug() << "mode detected as " << mode << eom; + generator.set_mode(mode); +} + void string_refinementt::display_index_set() { for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { @@ -102,7 +112,6 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if (refined_string_typet::is_unrefined_string_type(type)) { - generator.check_char_type(expr); string_exprt str = generator.string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; @@ -121,6 +130,12 @@ bvt string_refinementt::convert_function_application(const function_application_ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) { if(!equality_propagation) return true; + + // We should not do that everytime, but I cannot find + // another good entry point + if(generator.get_mode() == ID_unknown) + set_mode(); + const typet &type=ns.follow(expr.lhs().type()); if(expr.lhs().id()==ID_symbol && @@ -133,7 +148,6 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) if(refined_string_typet::is_unrefined_string_type(type)) { - generator.check_char_type(expr.lhs()); symbol_exprt sym = to_symbol_expr(expr.lhs()); generator.string_of_expr(sym,expr.rhs()); return false; @@ -165,7 +179,6 @@ void string_refinementt::print_time(std::string s) decision_proceduret::resultt string_refinementt::dec_solve() { - print_time("string_refinementt::dec_solve"); for(unsigned i = 0; i < generator.axioms.size(); i++) if(generator.axioms[i].id() == ID_string_constraint) diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index c94efa50024..6f4c2afc7c5 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -26,6 +26,9 @@ class string_refinementt: public bv_refinementt string_refinementt(const namespacet &_ns, propt &_prop); ~string_refinementt() {}; + //Determine which language should be used + void set_mode(); + // Should we use counter examples at each iteration? bool use_counter_example; From 91ebe6198ca8f6d5d33c644f48eb914f0199f89e Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 15:36:30 +0000 Subject: [PATCH 207/221] Renaming functions of string constraint generator We made more explicit what is being made by the functions. In particular the functions that generate axioms begin by add_axioms_for, or add_axioms_from (for conversion to string). We renamed this funtion to find_or_add_string_of_symbol to make more explicit what it is doing. --- .../string_constraint_generator.cpp | 550 +++++++++--------- .../refinement/string_constraint_generator.h | 226 +++---- src/solvers/refinement/string_refinement.cpp | 10 +- 3 files changed, 392 insertions(+), 394 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index ad951a681b8..c71e5fe3d0a 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -15,7 +15,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -constant_exprt string_constraint_generatort::constant_char(int i) +constant_exprt string_constraint_generatort::constant_char(int i) const { if(mode==ID_C) return from_integer(i,refined_string_typet::char_type()); @@ -24,7 +24,7 @@ constant_exprt string_constraint_generatort::constant_char(int i) else assert(false); // only C and java modes supported } -unsignedbv_typet string_constraint_generatort::get_char_type() +unsignedbv_typet string_constraint_generatort::get_char_type() const { if(mode==ID_C) return refined_string_typet::char_type(); @@ -33,7 +33,7 @@ unsignedbv_typet string_constraint_generatort::get_char_type() else assert(false); // only C and java modes supported } -size_t string_constraint_generatort::get_char_width() +size_t string_constraint_generatort::get_char_width() const { if(mode==ID_C) return STRING_SOLVER_C_CHAR_WIDTH; @@ -62,31 +62,31 @@ symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix) } -string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefined_string) +string_exprt string_constraint_generatort::add_axioms_for_string_expr(const exprt & unrefined_string) { string_exprt s; if(unrefined_string.id() == ID_function_application) { - exprt res = function_application(to_function_application_expr(unrefined_string)); + exprt res = add_axioms_for_function_application(to_function_application_expr(unrefined_string)); assert(res.type() == refined_string_typet(get_char_type())); s = to_string_expr(res); } else if(unrefined_string.id()==ID_symbol) - s = get_string_of_symbol(to_symbol_expr(unrefined_string)); + s = find_or_add_string_of_symbol(to_symbol_expr(unrefined_string)); else if(unrefined_string.id()==ID_address_of) { assert(unrefined_string.op0().id()==ID_symbol); - s = get_string_of_symbol(to_symbol_expr(unrefined_string.op0())); + s = find_or_add_string_of_symbol(to_symbol_expr(unrefined_string.op0())); } else if(unrefined_string.id()==ID_if) - s = string_if(to_if_expr(unrefined_string)); + s = add_axioms_for_if(to_if_expr(unrefined_string)); else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { // We ignore non deterministic symbols and struct } else { - throw ("string_exprt of:\n" + unrefined_string.pretty() + throw ("add_axioms_for_string_expr:\n" + unrefined_string.pretty() + "\nwhich is not a function application, a symbol or an if expression"); } @@ -96,13 +96,13 @@ string_exprt string_constraint_generatort::string_of_expr(const exprt & unrefine -string_exprt string_constraint_generatort::string_if(const if_exprt &expr) +string_exprt string_constraint_generatort::add_axioms_for_if(const if_exprt &expr) { string_exprt res(get_char_type()); assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); - string_exprt t = string_of_expr(expr.true_case()); + string_exprt t = add_axioms_for_string_expr(expr.true_case()); assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); - string_exprt f = string_of_expr(expr.false_case()); + string_exprt f = add_axioms_for_string_expr(expr.false_case()); axioms.push_back(implies_exprt(expr.cond(),res.same_length(t))); symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); @@ -116,7 +116,7 @@ string_exprt string_constraint_generatort::string_if(const if_exprt &expr) } -string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exprt & sym) +string_exprt string_constraint_generatort::find_or_add_string_of_symbol(const symbol_exprt & sym) { irep_idt id = sym.get_identifier(); std::map::iterator f = symbol_to_string.find(id); @@ -127,11 +127,8 @@ string_exprt string_constraint_generatort::get_string_of_symbol(const symbol_exp return symbol_to_string[id]; } -string_exprt string_constraint_generatort::string_of_symbol(const symbol_exprt & sym) -{ return get_string_of_symbol(sym); } - -exprt string_constraint_generatort::function_application +exprt string_constraint_generatort::add_axioms_for_function_application (const function_application_exprt & expr) { const exprt &name = expr.function(); @@ -139,123 +136,123 @@ exprt string_constraint_generatort::function_application const irep_idt &id = to_symbol_expr(name).get_identifier(); if (starts_with(id,cprover_char_literal_func)) - return char_literal(expr); + return add_axioms_for_char_literal(expr); else if (starts_with(id,cprover_string_length_func)) - return string_length(expr); + return add_axioms_for_length(expr); else if (starts_with(id,cprover_string_equal_func)) - return string_equal(expr); + return add_axioms_for_equal(expr); else if (starts_with(id,cprover_string_equals_ignore_case_func)) - return string_equals_ignore_case(expr); + return add_axioms_for_equals_ignore_case(expr); else if (starts_with(id,cprover_string_is_empty_func)) - return string_is_empty(expr); + return add_axioms_for_is_empty(expr); else if (starts_with(id,cprover_string_char_at_func)) - return string_char_at(expr); + return add_axioms_for_char_at(expr); else if (starts_with(id,cprover_string_is_prefix_func)) - return string_is_prefix(expr); + return add_axioms_for_is_prefix(expr); else if (starts_with(id,cprover_string_is_suffix_func)) - return string_is_suffix(expr); + return add_axioms_for_is_suffix(expr); else if (starts_with(id,cprover_string_startswith_func)) - return string_is_prefix(expr,true); + return add_axioms_for_is_prefix(expr,true); else if (starts_with(id,cprover_string_endswith_func)) - return string_is_suffix(expr,true); + return add_axioms_for_is_suffix(expr,true); else if (starts_with(id,cprover_string_contains_func)) - return string_contains(expr); + return add_axioms_for_contains(expr); else if (starts_with(id,cprover_string_hash_code_func)) - return string_hash_code(expr); + return add_axioms_for_hash_code(expr); else if (starts_with(id,cprover_string_index_of_func)) - return string_index_of(expr); + return add_axioms_for_index_of(expr); else if (starts_with(id,cprover_string_last_index_of_func)) - return string_last_index_of(expr); + return add_axioms_for_last_index_of(expr); else if (starts_with(id,cprover_string_parse_int_func)) - return string_parse_int(expr); + return add_axioms_for_parse_int(expr); else if (starts_with(id,cprover_string_to_char_array_func)) - return string_to_char_array(expr); + return add_axioms_for_to_char_array(expr); else if (starts_with(id,cprover_string_code_point_at_func)) - return string_code_point_at(expr); + return add_axioms_for_code_point_at(expr); else if (starts_with(id,cprover_string_code_point_before_func)) - return string_code_point_before(expr); + return add_axioms_for_code_point_before(expr); else if (starts_with(id,cprover_string_code_point_count_func)) - return string_code_point_count(expr); + return add_axioms_for_code_point_count(expr); else if (starts_with(id,cprover_string_offset_by_code_point_func)) - return string_offset_by_code_point(expr); + return add_axioms_for_offset_by_code_point(expr); else if (starts_with(id,cprover_string_compare_to_func)) - return string_compare_to(expr); + return add_axioms_for_compare_to(expr); else if(starts_with(id,cprover_string_literal_func)) - return string_literal(expr); + return add_axioms_from_literal(expr); else if(starts_with(id,cprover_string_concat_func)) - return string_concat(expr); + return add_axioms_for_concat(expr); else if(starts_with(id,cprover_string_concat_int_func)) - return string_concat_int(expr); + return add_axioms_for_concat_int(expr); else if(starts_with(id,cprover_string_concat_long_func)) - return string_concat_long(expr); + return add_axioms_for_concat_long(expr); else if(starts_with(id,cprover_string_concat_bool_func)) - return string_concat_bool(expr); + return add_axioms_for_concat_bool(expr); else if(starts_with(id,cprover_string_concat_char_func)) - return string_concat_char(expr); + return add_axioms_for_concat_char(expr); else if(starts_with(id,cprover_string_concat_double_func)) - return string_concat_double(expr); + return add_axioms_for_concat_double(expr); else if(starts_with(id,cprover_string_concat_float_func)) - return string_concat_float(expr); + return add_axioms_for_concat_float(expr); else if(starts_with(id,cprover_string_concat_code_point_func)) - return string_concat_code_point(expr); + return add_axioms_for_concat_code_point(expr); else if(starts_with(id,cprover_string_insert_func)) - return string_insert(expr); + return add_axioms_for_insert(expr); else if(starts_with(id,cprover_string_insert_int_func)) - return string_insert_int(expr); + return add_axioms_for_insert_int(expr); else if(starts_with(id,cprover_string_insert_long_func)) - return string_insert_long(expr); + return add_axioms_for_insert_long(expr); else if(starts_with(id,cprover_string_insert_bool_func)) - return string_insert_bool(expr); + return add_axioms_for_insert_bool(expr); else if(starts_with(id,cprover_string_insert_char_func)) - return string_insert_char(expr); + return add_axioms_for_insert_char(expr); else if(starts_with(id,cprover_string_insert_double_func)) - return string_insert_double(expr); + return add_axioms_for_insert_double(expr); else if(starts_with(id,cprover_string_insert_float_func)) - return string_insert_float(expr); + return add_axioms_for_insert_float(expr); else if(starts_with(id,cprover_string_insert_char_array_func)) - return string_insert_char_array(expr); + return add_axioms_for_insert_char_array(expr); else if(starts_with(id,cprover_string_substring_func)) - return string_substring(expr); + return add_axioms_for_substring(expr); else if(starts_with(id,cprover_string_trim_func)) - return string_trim(expr); + return add_axioms_for_trim(expr); else if(starts_with(id,cprover_string_to_lower_case_func)) - return string_to_lower_case(expr); + return add_axioms_for_to_lower_case(expr); else if(starts_with(id,cprover_string_to_upper_case_func)) - return string_to_upper_case(expr); + return add_axioms_for_to_upper_case(expr); else if(starts_with(id,cprover_string_char_set_func)) - return string_char_set(expr); + return add_axioms_for_char_set(expr); else if(starts_with(id,cprover_string_value_of_func)) - return string_value_of(expr); + return add_axioms_for_value_of(expr); else if(starts_with(id,cprover_string_empty_string_func)) - return empty_string(expr); + return add_axioms_for_empty_string(expr); else if(starts_with(id,cprover_string_copy_func)) - return string_copy(expr); + return add_axioms_for_copy(expr); else if(starts_with(id,cprover_string_of_int_func)) - return of_int(expr); + return add_axioms_from_int(expr); else if(starts_with(id,cprover_string_of_int_hex_func)) - return of_int_hex(expr); + return add_axioms_from_int_hex(expr); else if(starts_with(id,cprover_string_of_float_func)) - return of_float(expr); + return add_axioms_from_float(expr); else if(starts_with(id,cprover_string_of_double_func)) - return of_double(expr); + return add_axioms_from_double(expr); else if(starts_with(id,cprover_string_of_long_func)) - return of_long(expr); + return add_axioms_from_long(expr); else if(starts_with(id,cprover_string_of_bool_func)) - return of_bool(expr); + return add_axioms_from_bool(expr); else if(starts_with(id,cprover_string_of_char_func)) - return of_char(expr); + return add_axioms_from_char(expr); else if(starts_with(id,cprover_string_of_char_array_func)) - return of_char_array(expr); + return add_axioms_from_char_array(expr); else if(starts_with(id,cprover_string_set_length_func)) - return string_set_length(expr); + return add_axioms_for_set_length(expr); else if(starts_with(id,cprover_string_delete_func)) - return string_delete(expr); + return add_axioms_for_delete(expr); else if(starts_with(id,cprover_string_delete_char_at_func)) - return string_delete_char_at(expr); + return add_axioms_for_delete_char_at(expr); else if(starts_with(id,cprover_string_replace_func)) - return string_replace(expr); + return add_axioms_for_replace(expr); else if(starts_with(id,cprover_string_data_func)) - return string_data(expr); + return add_axioms_for_data(expr); else { std::string msg("string_exprt::function_application: unknown symbol :"); @@ -272,7 +269,7 @@ irep_idt extract_java_string(const symbol_exprt & s) return irep_idt(value); } -string_exprt string_constraint_generatort::string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type){ +string_exprt string_constraint_generatort::add_axioms_for_constant(irep_idt sval, int char_width, unsignedbv_typet char_type){ string_exprt res(char_type); std::string str = sval.c_str(); @@ -295,7 +292,7 @@ string_exprt string_constraint_generatort::string_constant(irep_idt sval, int ch return res; } -string_exprt string_constraint_generatort::empty_string(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_empty_string(const function_application_exprt &f) { assert(f.arguments().size() == 0); string_exprt res(get_char_type()); @@ -303,7 +300,7 @@ string_exprt string_constraint_generatort::empty_string(const function_applicati return res; } -string_exprt string_constraint_generatort::string_literal(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_from_literal(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 1); //bad args to string literal? @@ -340,11 +337,11 @@ string_exprt string_constraint_generatort::string_literal(const function_applica char_type = refined_string_typet::java_char_type(); } - return string_constant(sval,char_width,char_type); + return add_axioms_for_constant(sval,char_width,char_type); } -string_exprt string_constraint_generatort::string_concat(const string_exprt & s1, const string_exprt & s2) +string_exprt string_constraint_generatort::add_axioms_for_concat(const string_exprt & s1, const string_exprt & s2) { // |res| = |s1| + |s2| string_exprt res(get_char_type()); @@ -366,21 +363,21 @@ string_exprt string_constraint_generatort::string_concat(const string_exprt & s1 } -string_exprt string_constraint_generatort::string_concat(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_concat(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); - string_exprt s1 = string_of_expr(args[0]); - string_exprt s2 = string_of_expr(args[1]); + string_exprt s1 = add_axioms_for_string_expr(args[0]); + string_exprt s2 = add_axioms_for_string_expr(args[1]); - return string_concat(s1, s2); + return add_axioms_for_concat(s1, s2); } -string_exprt string_constraint_generatort::string_copy(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_copy(const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,1)[0]); + string_exprt s1 = add_axioms_for_string_expr(args(f,1)[0]); string_exprt res(get_char_type()); axioms.push_back(res.same_length(s1)); symbol_exprt idx = fresh_univ_index("QA_index_copy"); @@ -389,9 +386,9 @@ string_exprt string_constraint_generatort::string_copy(const function_applicatio return res; } -string_exprt string_constraint_generatort::string_set_length(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_set_length(const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); exprt k = args(f,2)[1]; string_exprt res(get_char_type()); @@ -409,7 +406,7 @@ string_exprt string_constraint_generatort::string_set_length(const function_appl } -string_exprt string_constraint_generatort::java_char_array(const exprt & char_array) +string_exprt string_constraint_generatort::add_axioms_for_java_char_array(const exprt & char_array) { string_exprt res(get_char_type()); exprt arr = to_address_of_expr(char_array).object(); @@ -421,7 +418,7 @@ string_exprt string_constraint_generatort::java_char_array(const exprt & char_ar } -string_exprt string_constraint_generatort::string_value_of(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_value_of(const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); if(args.size() == 3) @@ -430,7 +427,7 @@ string_exprt string_constraint_generatort::string_value_of(const function_applic exprt char_array = args[0]; exprt offset = args[1]; exprt count = args[2]; - string_exprt str = java_char_array(char_array); + string_exprt str = add_axioms_for_java_char_array(char_array); axioms.push_back(res.has_length(count)); symbol_exprt idx = fresh_univ_index("QA_index_value_of"); string_constraintt a1(idx, count, equal_exprt(str[plus_exprt(idx,offset)],res[idx])); @@ -440,23 +437,23 @@ string_exprt string_constraint_generatort::string_value_of(const function_applic else { assert(args.size() == 1); - return java_char_array(args[0]); + return add_axioms_for_java_char_array(args[0]); } } -string_exprt string_constraint_generatort::string_substring +string_exprt string_constraint_generatort::add_axioms_for_substring (const function_application_exprt &f) { assert(f.arguments().size() >= 2); - string_exprt str = string_of_expr(f.arguments()[0]); + string_exprt str = add_axioms_for_string_expr(f.arguments()[0]); exprt i(f.arguments()[1]); exprt j; if(f.arguments().size() == 3) j = f.arguments()[2]; else { assert(f.arguments().size() == 2); j = str.length(); } - return string_substring(str,i,j); + return add_axioms_for_substring(str,i,j); } -string_exprt string_constraint_generatort::string_substring +string_exprt string_constraint_generatort::add_axioms_for_substring (const string_exprt & str, const exprt & start, const exprt & end) { symbol_exprt idx = fresh_exist_index("index_substring"); @@ -478,10 +475,10 @@ string_exprt string_constraint_generatort::string_substring return res; } -string_exprt string_constraint_generatort::string_trim +string_exprt string_constraint_generatort::add_axioms_for_trim (const function_application_exprt &expr) { - string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(expr,1)[0]); string_exprt res(get_char_type()); symbol_exprt idx = fresh_exist_index("index_trim"); exprt space_char = constant_char(32); @@ -517,10 +514,10 @@ string_exprt string_constraint_generatort::string_trim return res; } -string_exprt string_constraint_generatort::string_to_lower_case +string_exprt string_constraint_generatort::add_axioms_for_to_lower_case (const function_application_exprt &expr) { - string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(expr,1)[0]); string_exprt res(get_char_type()); exprt char_a = constant_char(97); exprt char_A = constant_char(65); @@ -541,10 +538,10 @@ string_exprt string_constraint_generatort::string_to_lower_case } -string_exprt string_constraint_generatort::string_to_upper_case +string_exprt string_constraint_generatort::add_axioms_for_to_upper_case (const function_application_exprt &expr) { - string_exprt str = string_of_expr(args(expr,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(expr,1)[0]); string_exprt res(get_char_type()); exprt char_a = constant_char(97); exprt char_A = constant_char(65); @@ -565,23 +562,23 @@ string_exprt string_constraint_generatort::string_to_upper_case } -string_exprt string_constraint_generatort::of_int +string_exprt string_constraint_generatort::add_axioms_from_int (const function_application_exprt &expr) -{ return of_int(args(expr,1)[0],10); } +{ return add_axioms_from_int(args(expr,1)[0],10); } -string_exprt string_constraint_generatort::of_long +string_exprt string_constraint_generatort::add_axioms_from_long (const function_application_exprt &expr) -{ return of_int(args(expr,1)[0],30); } +{ return add_axioms_from_int(args(expr,1)[0],30); } -string_exprt string_constraint_generatort::of_float +string_exprt string_constraint_generatort::add_axioms_from_float (const function_application_exprt &f) -{ return of_float(args(f,1)[0],false); } +{ return add_axioms_from_float(args(f,1)[0],false); } -string_exprt string_constraint_generatort::of_double +string_exprt string_constraint_generatort::add_axioms_from_double (const function_application_exprt &f) -{ return of_float(args(f,1)[0],true); } +{ return add_axioms_from_float(args(f,1)[0],true); } -string_exprt string_constraint_generatort::of_float +string_exprt string_constraint_generatort::add_axioms_from_float (const exprt &f, bool double_precision) { // Warning: we currently only have partial specification @@ -596,7 +593,7 @@ string_exprt string_constraint_generatort::of_float string_exprt sign_string(char_type); // If the argument is NaN, the result is the string "NaN". - string_exprt nan_string = string_constant("NaN",char_width,char_type); + string_exprt nan_string = add_axioms_for_constant("NaN",char_width,char_type); ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); @@ -620,7 +617,7 @@ string_exprt string_constraint_generatort::of_float // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". - string_exprt infinity_string = string_constant("Infinity",char_width,char_type); + string_exprt infinity_string = add_axioms_for_constant("Infinity",char_width,char_type); exprt isinf = float_bvt().isinf(f,fspec); axioms.push_back(implies_exprt(isinf, magnitude.same_length(infinity_string))); symbol_exprt qvar_inf = fresh_univ_index("QA_equal_infinity"); @@ -630,23 +627,23 @@ string_exprt string_constraint_generatort::of_float //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". - string_exprt zero_string = string_constant("0.0", char_width, char_type); + string_exprt zero_string = add_axioms_for_constant("0.0", char_width, char_type); exprt iszero = float_bvt().is_zero(f,fspec); axioms.push_back(implies_exprt(iszero, magnitude.same_length(zero_string))); symbol_exprt qvar_zero = fresh_univ_index("QA_equal_zero"); axioms.push_back (string_constraintt(qvar_zero, zero_string.length(), iszero, equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]))); - return string_concat(sign_string,magnitude); + return add_axioms_for_concat(sign_string,magnitude); } -string_exprt string_constraint_generatort::of_bool +string_exprt string_constraint_generatort::add_axioms_from_bool (const function_application_exprt &f) -{ return of_bool(args(f,1)[0]); } +{ return add_axioms_from_bool(args(f,1)[0]); } -string_exprt string_constraint_generatort::of_bool(const exprt &i) +string_exprt string_constraint_generatort::add_axioms_from_bool(const exprt &i) { unsignedbv_typet char_type = get_char_type(); int char_width = get_char_width(); @@ -656,8 +653,8 @@ string_exprt string_constraint_generatort::of_bool(const exprt &i) typecast_exprt eq(i,bool_typet()); - string_exprt true_string = string_constant("true",char_width,char_type); - string_exprt false_string = string_constant("false",char_width,char_type); + string_exprt true_string = add_axioms_for_constant("true",char_width,char_type); + string_exprt false_string = add_axioms_for_constant("false",char_width,char_type); axioms.push_back(implies_exprt(eq, res.same_length(true_string))); symbol_exprt qvar = fresh_univ_index("QA_equal_true"); @@ -673,7 +670,7 @@ string_exprt string_constraint_generatort::of_bool(const exprt &i) } -string_exprt string_constraint_generatort::of_int +string_exprt string_constraint_generatort::add_axioms_from_int (const exprt &i, size_t max_size) { string_exprt res(get_char_type()); @@ -745,7 +742,8 @@ string_exprt string_constraint_generatort::of_int } -exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_width, typet char_type) +exprt string_constraint_generatort::int_of_hex_char +(exprt chr, unsigned char_width, typet char_type) const { exprt zero_char = constant_char('0'); exprt nine_char = constant_char('9'); @@ -756,7 +754,7 @@ exprt string_constraint_generatort::int_of_hex_char(exprt chr, unsigned char_wid } -string_exprt string_constraint_generatort::of_int_hex(const exprt &i) +string_exprt string_constraint_generatort::add_axioms_from_int_hex(const exprt &i) { string_exprt res(get_char_type()); typet type = i.type(); @@ -802,15 +800,15 @@ string_exprt string_constraint_generatort::of_int_hex(const exprt &i) return res; } -string_exprt string_constraint_generatort::of_int_hex +string_exprt string_constraint_generatort::add_axioms_from_int_hex (const function_application_exprt &f) -{ return of_int_hex(args(f,1)[0]); } +{ return add_axioms_from_int_hex(args(f,1)[0]); } -string_exprt string_constraint_generatort::of_char +string_exprt string_constraint_generatort::add_axioms_from_char (const function_application_exprt &f) -{ return of_char(args(f,1)[0]); } +{ return add_axioms_from_char(args(f,1)[0]); } -string_exprt string_constraint_generatort::of_char(const exprt &c) +string_exprt string_constraint_generatort::add_axioms_from_char(const exprt &c) { string_exprt res(get_char_type()); and_exprt lemma(equal_exprt(res[0], c), res.has_length(1)); @@ -819,7 +817,7 @@ string_exprt string_constraint_generatort::of_char(const exprt &c) } -string_exprt string_constraint_generatort::code_point(const exprt &code_point) +string_exprt string_constraint_generatort::add_axioms_for_code_point(const exprt &code_point) { string_exprt res(get_char_type()); typet type = code_point.type(); @@ -849,11 +847,11 @@ string_exprt string_constraint_generatort::code_point(const exprt &code_point) } -string_exprt string_constraint_generatort::string_char_set +string_exprt string_constraint_generatort::add_axioms_for_char_set (const function_application_exprt &f) { string_exprt res(get_char_type()); - string_exprt str = string_of_expr(args(f,3)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); with_exprt sarrnew(str.content(), args(f,3)[1], args(f,3)[2]); implies_exprt lemma(binary_relation_exprt(args(f,3)[1], ID_lt, str.length()), and_exprt(equal_exprt(res.content(), sarrnew), @@ -862,10 +860,10 @@ string_exprt string_constraint_generatort::string_char_set return res; } -string_exprt string_constraint_generatort::string_replace +string_exprt string_constraint_generatort::add_axioms_for_replace (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,3)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); exprt oldChar = args(f,3)[1]; exprt newChar = args(f,3)[2]; string_exprt res(get_char_type()); @@ -882,164 +880,164 @@ string_exprt string_constraint_generatort::string_replace return res; } -string_exprt string_constraint_generatort::string_delete_char_at +string_exprt string_constraint_generatort::add_axioms_for_delete_char_at (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,2)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); exprt index_one = refined_string_typet::index_of_int(1); - return string_delete(str,args(f,2)[1],plus_exprt(args(f,2)[1],index_one)); + return add_axioms_for_delete(str,args(f,2)[1],plus_exprt(args(f,2)[1],index_one)); } -string_exprt string_constraint_generatort::string_delete +string_exprt string_constraint_generatort::add_axioms_for_delete (const string_exprt &str, const exprt & start, const exprt & end) { assert(start.type() == refined_string_typet::index_type()); assert(end.type() == refined_string_typet::index_type()); - string_exprt str1 = string_substring(str,refined_string_typet::index_zero(),start); - string_exprt str2 = string_substring(str,end,str.length()); - return string_concat(str1,str2); + string_exprt str1 = add_axioms_for_substring(str,refined_string_typet::index_zero(),start); + string_exprt str2 = add_axioms_for_substring(str,end,str.length()); + return add_axioms_for_concat(str1,str2); } -string_exprt string_constraint_generatort::string_delete +string_exprt string_constraint_generatort::add_axioms_for_delete (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,3)[0]); - return string_delete(str,args(f,3)[1],args(f,3)[2]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); + return add_axioms_for_delete(str,args(f,3)[1],args(f,3)[2]); } -string_exprt string_constraint_generatort::string_concat_int +string_exprt string_constraint_generatort::add_axioms_for_concat_int (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_int(args(f,2)[1],10); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_int(args(f,2)[1],10); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_long +string_exprt string_constraint_generatort::add_axioms_for_concat_long (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_int(args(f,2)[1],30); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_int(args(f,2)[1],30); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_bool +string_exprt string_constraint_generatort::add_axioms_for_concat_bool (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_bool(args(f,2)[1]); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_bool(args(f,2)[1]); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_char +string_exprt string_constraint_generatort::add_axioms_for_concat_char (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_char(args(f,2)[1]); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_char(args(f,2)[1]); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_double +string_exprt string_constraint_generatort::add_axioms_for_concat_double (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_float(args(f,2)[1],30); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_float(args(f,2)[1],30); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_float +string_exprt string_constraint_generatort::add_axioms_for_concat_float (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = of_float(args(f,2)[1],10); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_from_float(args(f,2)[1],10); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_concat_code_point +string_exprt string_constraint_generatort::add_axioms_for_concat_code_point (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = code_point(args(f,2)[1]); - return string_concat(s1,s2); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_for_code_point(args(f,2)[1]); + return add_axioms_for_concat(s1,s2); } -string_exprt string_constraint_generatort::string_insert +string_exprt string_constraint_generatort::add_axioms_for_insert (const string_exprt & s1, const string_exprt & s2, const exprt & offset) { assert(offset.type() == refined_string_typet::index_type()); - string_exprt pref = string_substring(s1,refined_string_typet::index_zero(),offset); - string_exprt suf = string_substring(s1,offset,s1.length()); - string_exprt concat1 = string_concat(pref,s2); - return string_concat(concat1,suf); + string_exprt pref = add_axioms_for_substring(s1,refined_string_typet::index_zero(),offset); + string_exprt suf = add_axioms_for_substring(s1,offset,s1.length()); + string_exprt concat1 = add_axioms_for_concat(pref,s2); + return add_axioms_for_concat(concat1,suf); } -string_exprt string_constraint_generatort::string_insert +string_exprt string_constraint_generatort::add_axioms_for_insert (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = string_of_expr(args(f,3)[2]); - return string_insert(s1, s2, args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_for_string_expr(args(f,3)[2]); + return add_axioms_for_insert(s1, s2, args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_int +string_exprt string_constraint_generatort::add_axioms_for_insert_int (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_int(args(f,3)[2],10); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_int(args(f,3)[2],10); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_long +string_exprt string_constraint_generatort::add_axioms_for_insert_long (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_int(args(f,3)[2],30); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_int(args(f,3)[2],30); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_bool +string_exprt string_constraint_generatort::add_axioms_for_insert_bool (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_bool(args(f,3)[2]); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_bool(args(f,3)[2]); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_char +string_exprt string_constraint_generatort::add_axioms_for_insert_char (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_char(args(f,3)[2]); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_char(args(f,3)[2]); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_double +string_exprt string_constraint_generatort::add_axioms_for_insert_double (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_float(args(f,3)[2]); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_float(args(f,3)[2]); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -string_exprt string_constraint_generatort::string_insert_float +string_exprt string_constraint_generatort::add_axioms_for_insert_float (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,3)[0]); - string_exprt s2 = of_float(args(f,3)[2]); - return string_insert(s1,s2,args(f,3)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); + string_exprt s2 = add_axioms_from_float(args(f,3)[2]); + return add_axioms_for_insert(s1,s2,args(f,3)[1]); } -exprt string_constraint_generatort::string_equal +exprt string_constraint_generatort::add_axioms_for_equal (const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt eq = fresh_boolean("equal"); typecast_exprt tc_eq(eq,f.type()); - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = string_of_expr(args(f,2)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_for_string_expr(args(f,2)[1]); // We want to write: // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) @@ -1079,7 +1077,7 @@ exprt character_equals_ignore_case and_exprt(is_upper_case_2, equal_exprt(minus_exprt(plus_exprt(char_a,char2),char_A),char1))); } -exprt string_constraint_generatort::string_equals_ignore_case +exprt string_constraint_generatort::add_axioms_for_equals_ignore_case (const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); @@ -1089,8 +1087,8 @@ exprt string_constraint_generatort::string_equals_ignore_case exprt char_a = constant_char('a'); exprt char_A = constant_char('A'); exprt char_Z = constant_char('Z'); - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = string_of_expr(args(f,2)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_for_string_expr(args(f,2)[1]); symbol_exprt witness = fresh_exist_index("witness_unequal_ignore_case"); symbol_exprt qvar = fresh_univ_index("QA_equal_ignore_case"); @@ -1112,17 +1110,17 @@ exprt string_constraint_generatort::string_equals_ignore_case } -exprt string_constraint_generatort::string_length +exprt string_constraint_generatort::add_axioms_for_length (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); return str.length(); } -exprt string_constraint_generatort::string_data +exprt string_constraint_generatort::add_axioms_for_data (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,3)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); exprt tab_data = args(f,3)[1]; exprt data = args(f,3)[2]; symbol_exprt qvar = fresh_univ_index("QA_string_data"); @@ -1146,7 +1144,7 @@ exprt string_constraint_generatort::string_data return void_expr; } -string_exprt string_constraint_generatort::of_char_array +string_exprt string_constraint_generatort::add_axioms_from_char_array (const exprt & length, const exprt & data, const exprt & offset, const exprt & count) { string_exprt str(get_char_type()); @@ -1162,7 +1160,7 @@ string_exprt string_constraint_generatort::of_char_array return str; } -string_exprt string_constraint_generatort::of_char_array +string_exprt string_constraint_generatort::add_axioms_from_char_array (const function_application_exprt &f) { exprt offset; @@ -1180,10 +1178,10 @@ string_exprt string_constraint_generatort::of_char_array } exprt tab_length = f.arguments()[0]; exprt data = f.arguments()[1]; - return of_char_array(tab_length,data,offset,count); + return add_axioms_from_char_array(tab_length,data,offset,count); } -string_exprt string_constraint_generatort::string_insert_char_array +string_exprt string_constraint_generatort::add_axioms_for_insert_char_array (const function_application_exprt &f) { exprt offset; @@ -1200,11 +1198,11 @@ string_exprt string_constraint_generatort::string_insert_char_array offset = from_integer(0,signedbv_typet(32)); } - string_exprt str = string_of_expr(f.arguments()[0]); + string_exprt str = add_axioms_for_string_expr(f.arguments()[0]); exprt length = f.arguments()[2]; exprt data = f.arguments()[3]; - string_exprt arr = of_char_array(length,data,offset,count); - return string_insert(str,arr,f.arguments()[1]); + string_exprt arr = add_axioms_from_char_array(length,data,offset,count); + return add_axioms_for_insert(str,arr,f.arguments()[1]); } @@ -1213,7 +1211,7 @@ exprt is_positive(const exprt & x) { return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } -exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) +exprt string_constraint_generatort::add_axioms_for_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) { symbol_exprt isprefix = fresh_boolean("isprefix"); axioms.push_back(implies_exprt(isprefix, str.longer(plus_exprt(prefix.length(),offset)))); @@ -1236,32 +1234,32 @@ exprt string_constraint_generatort::string_is_prefix(const string_exprt &prefix, return isprefix; } -exprt string_constraint_generatort::string_is_prefix +exprt string_constraint_generatort::add_axioms_for_is_prefix (const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - string_exprt s0 = string_of_expr(args[swap_arguments?1:0]); - string_exprt s1 = string_of_expr(args[swap_arguments?0:1]); + string_exprt s0 = add_axioms_for_string_expr(args[swap_arguments?1:0]); + string_exprt s1 = add_axioms_for_string_expr(args[swap_arguments?0:1]); exprt offset; if(args.size() == 2) offset = refined_string_typet::index_zero(); else if (args.size() == 3) offset = args[2]; - return typecast_exprt(string_is_prefix(s0,s1,offset),f.type()); + return typecast_exprt(add_axioms_for_is_prefix(s0,s1,offset),f.type()); } -exprt string_constraint_generatort::string_is_empty +exprt string_constraint_generatort::add_axioms_for_is_empty (const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt is_empty = fresh_boolean("is_empty"); - string_exprt s0 = string_of_expr(args(f,1)[0]); + string_exprt s0 = add_axioms_for_string_expr(args(f,1)[0]); axioms.push_back(implies_exprt(is_empty, s0.has_length(0))); axioms.push_back(implies_exprt(s0.has_length(0),is_empty)); return typecast_exprt(is_empty,f.type()); } -exprt string_constraint_generatort::string_is_suffix +exprt string_constraint_generatort::add_axioms_for_is_suffix (const function_application_exprt &f, bool swap_arguments) { const function_application_exprt::argumentst &args = f.arguments(); @@ -1270,8 +1268,8 @@ exprt string_constraint_generatort::string_is_suffix symbol_exprt issuffix = fresh_boolean("issuffix"); typecast_exprt tc_issuffix(issuffix,f.type()); - string_exprt s0 = string_of_expr(args[swap_arguments?1:0]); - string_exprt s1 = string_of_expr(args[swap_arguments?0:1]); + string_exprt s0 = add_axioms_for_string_expr(args[swap_arguments?1:0]); + string_exprt s1 = add_axioms_for_string_expr(args[swap_arguments?0:1]); // issufix(s1,s0) => s0.length >= s1.length // && forall witness < s1.length. @@ -1304,14 +1302,14 @@ exprt string_constraint_generatort::string_is_suffix } -exprt string_constraint_generatort::string_contains +exprt string_constraint_generatort::add_axioms_for_contains ( const function_application_exprt &f) { assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); symbol_exprt contains = fresh_boolean("contains"); typecast_exprt tc_contains(contains,f.type()); - string_exprt s0 = string_of_expr(args(f,2)[0]); - string_exprt s1 = string_of_expr(args(f,2)[1]); + string_exprt s0 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[1]); // contains => s0.length >= s1.length // && startpos <= s0.length - s1.length @@ -1343,9 +1341,9 @@ exprt string_constraint_generatort::string_contains } -exprt string_constraint_generatort::string_hash_code(const function_application_exprt &f) +exprt string_constraint_generatort::add_axioms_for_hash_code(const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); typet return_type = f.type(); // initialisation of the missing pool variable @@ -1375,7 +1373,7 @@ exprt string_constraint_generatort::string_hash_code(const function_application_ return hash[str]; } -exprt string_constraint_generatort::string_index_of +exprt string_constraint_generatort::add_axioms_for_index_of (const string_exprt &str, const exprt & c, const exprt & from_index) { symbol_exprt index = fresh_exist_index("index_of"); @@ -1406,7 +1404,7 @@ exprt string_constraint_generatort::string_index_of return index; } -exprt string_constraint_generatort::string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::add_axioms_for_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) { symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); @@ -1423,7 +1421,7 @@ exprt string_constraint_generatort::string_index_of_string(const string_exprt &s return offset; } -exprt string_constraint_generatort::string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::add_axioms_for_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) { symbol_exprt offset = fresh_exist_index("index_of"); symbol_exprt contains = fresh_boolean("contains_substring"); @@ -1441,12 +1439,12 @@ exprt string_constraint_generatort::string_last_index_of_string(const string_exp } -exprt string_constraint_generatort::string_index_of +exprt string_constraint_generatort::add_axioms_for_index_of ( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(f.type() == refined_string_typet::index_type()); - string_exprt str = string_of_expr(args[0]); + string_exprt str = add_axioms_for_string_expr(args[0]); exprt c = args[1]; exprt from_index; @@ -1456,14 +1454,14 @@ exprt string_constraint_generatort::string_index_of if(refined_string_typet::is_java_string_type(c.type())) { - string_exprt sub = string_of_expr(c); - return string_index_of_string(str,sub,from_index); + string_exprt sub = add_axioms_for_string_expr(c); + return add_axioms_for_index_of_string(str,sub,from_index); } else - return string_index_of(str,typecast_exprt(c,get_char_type()),from_index); + return add_axioms_for_index_of(str,typecast_exprt(c,get_char_type()),from_index); } -exprt string_constraint_generatort::string_last_index_of +exprt string_constraint_generatort::add_axioms_for_last_index_of (const string_exprt &str, const exprt & c, const exprt & from_index) { symbol_exprt index = fresh_exist_index("last_index_of"); @@ -1492,12 +1490,12 @@ exprt string_constraint_generatort::string_last_index_of return index; } -exprt string_constraint_generatort::string_last_index_of +exprt string_constraint_generatort::add_axioms_for_last_index_of ( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(f.type() == refined_string_typet::index_type()); - string_exprt str = string_of_expr(args[0]); + string_exprt str = add_axioms_for_string_expr(args[0]); exprt c = args[1]; exprt from_index; @@ -1509,14 +1507,14 @@ exprt string_constraint_generatort::string_last_index_of if(refined_string_typet::is_java_string_type(c.type())) { - string_exprt sub = string_of_expr(c); - return string_last_index_of_string(str,sub,from_index); + string_exprt sub = add_axioms_for_string_expr(c); + return add_axioms_for_last_index_of_string(str,sub,from_index); } else - return string_last_index_of(str,typecast_exprt(c,get_char_type()),from_index); + return add_axioms_for_last_index_of(str,typecast_exprt(c,get_char_type()),from_index); } -exprt string_constraint_generatort::char_literal +exprt string_constraint_generatort::add_axioms_for_char_literal ( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); @@ -1545,19 +1543,19 @@ exprt string_constraint_generatort::char_literal } -exprt string_constraint_generatort::string_char_at +exprt string_constraint_generatort::add_axioms_for_char_at ( const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,2)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); symbol_exprt char_sym = string_exprt::fresh_symbol("char",get_char_type()); axioms.push_back(equal_exprt(char_sym,str[args(f,2)[1]])); return char_sym; } -exprt string_constraint_generatort::string_parse_int +exprt string_constraint_generatort::add_axioms_for_parse_int (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); typet type = f.type(); symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); @@ -1595,25 +1593,25 @@ exprt string_constraint_generatort::string_parse_int } -exprt string_constraint_generatort::is_high_surrogate(const exprt & chr) +exprt string_constraint_generatort::is_high_surrogate(const exprt & chr) const { return and_exprt (binary_relation_exprt(chr,ID_ge,constant_char(0xD800)), binary_relation_exprt(chr,ID_le,constant_char(0xDBFF))); } -exprt string_constraint_generatort::is_low_surrogate(const exprt & chr) +exprt string_constraint_generatort::is_low_surrogate(const exprt & chr) const { return and_exprt (binary_relation_exprt(chr,ID_ge,constant_char(0xDC00)), binary_relation_exprt(chr,ID_le,constant_char(0xDFFF))); } -exprt string_constraint_generatort::string_code_point_at +exprt string_constraint_generatort::add_axioms_for_code_point_at ( const function_application_exprt &f) { typet return_type = f.type(); - string_exprt str = string_of_expr(args(f,2)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); exprt pos = args(f,2)[1]; symbol_exprt result = string_exprt::fresh_symbol("char",return_type); assert(return_type.id() == ID_signedbv); @@ -1639,14 +1637,14 @@ exprt string_constraint_generatort::string_code_point_at return result; } -exprt string_constraint_generatort::string_code_point_before +exprt string_constraint_generatort::add_axioms_for_code_point_before ( const function_application_exprt &f) { const function_application_exprt::argumentst &args = f.arguments(); assert(args.size() == 2); typet return_type = f.type(); symbol_exprt result = string_exprt::fresh_symbol("char",return_type); - string_exprt str = string_of_expr(args[0]); + string_exprt str = add_axioms_for_string_expr(args[0]); exprt char1 = str[minus_exprt(args[1],refined_string_typet::index_of_int(2))]; exprt char1_as_int = typecast_exprt(char1,return_type); @@ -1673,10 +1671,10 @@ exprt string_constraint_generatort::string_code_point_before return result; } -exprt string_constraint_generatort::string_code_point_count +exprt string_constraint_generatort::add_axioms_for_code_point_count ( const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,3)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); exprt begin = args(f,3)[1]; exprt end = args(f,3)[2]; typet return_type = f.type(); @@ -1688,10 +1686,10 @@ exprt string_constraint_generatort::string_code_point_count return result; } -exprt string_constraint_generatort::string_offset_by_code_point +exprt string_constraint_generatort::add_axioms_for_offset_by_code_point ( const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,3)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); exprt index = args(f,3)[1]; exprt offset = args(f,3)[2]; typet return_type = f.type(); @@ -1705,19 +1703,19 @@ exprt string_constraint_generatort::string_offset_by_code_point } -exprt string_constraint_generatort::string_to_char_array +exprt string_constraint_generatort::add_axioms_for_to_char_array (const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); return str.content(); } -exprt string_constraint_generatort::string_compare_to +exprt string_constraint_generatort::add_axioms_for_compare_to (const function_application_exprt &f) { - string_exprt s1 = string_of_expr(args(f,2)[0]); - string_exprt s2 = string_of_expr(args(f,2)[1]); + string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); + string_exprt s2 = add_axioms_for_string_expr(args(f,2)[1]); typet return_type = f.type(); symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); @@ -1769,9 +1767,9 @@ exprt string_constraint_generatort::string_compare_to return res; } -symbol_exprt string_constraint_generatort::string_intern(const function_application_exprt &f) +symbol_exprt string_constraint_generatort::add_axioms_for_intern(const function_application_exprt &f) { - string_exprt str = string_of_expr(args(f,1)[0]); + string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); typet return_type = f.type(); // initialisation of the missing pool variable @@ -1813,11 +1811,11 @@ symbol_exprt string_constraint_generatort::string_intern(const function_applicat } -void string_constraint_generatort::string_of_expr(const symbol_exprt & sym, const exprt & str) +void string_constraint_generatort::set_string_symbol_equal_to_expr(const symbol_exprt & sym, const exprt & str) { if(str.id()==ID_symbol) - assign_to_symbol(sym,string_of_symbol(to_symbol_expr(str))); + assign_to_symbol(sym,find_or_add_string_of_symbol(to_symbol_expr(str))); else - assign_to_symbol(sym,string_of_expr(str)); + assign_to_symbol(sym,add_axioms_for_string_expr(str)); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 574aaf3855b..28e5b1daed3 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -25,26 +25,14 @@ class string_constraint_generatort { inline irep_idt &get_mode() { return mode; } - constant_exprt constant_char(int i); - unsignedbv_typet get_char_type(); - size_t get_char_width(); - inline signedbv_typet get_index_type() {return refined_string_typet::index_type();}; + unsignedbv_typet get_char_type() const; + inline signedbv_typet get_index_type() const {return refined_string_typet::index_type();}; // Axioms are of three kinds: universally quantified string constraint, // not contains string constraints and simple formulas. std::vector axioms; - // Create a new string expression and add the necessary lemma - // to ensure its equal to the given string expression. - string_exprt make_string(const exprt &str); - - // Same thing but associates the string to the given symbol instead - // of returning it. - void make_string(const symbol_exprt & sym, const exprt &str); - - - // Boolean symbols that are used to know whether the results - // of some functions should be true. + // Boolean symbols for the results of some string functions std::vector boolean_symbols; // Symbols used in existential quantifications @@ -53,8 +41,8 @@ class string_constraint_generatort { // Used to store information about witnesses for not_contains constraints std::map witness; - // - inline exprt witness_of + // + inline exprt get_witness_of (const string_not_contains_constraintt & c, const exprt & univ_val) const { return index_exprt(witness.at(c), univ_val); } @@ -62,143 +50,155 @@ class string_constraint_generatort { symbol_exprt fresh_univ_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); + // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string std::map symbol_to_string; + + string_exprt find_or_add_string_of_symbol(const symbol_exprt & sym); + inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr) { symbol_to_string[sym.get_identifier()]= expr; } - // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string - string_exprt get_string_of_symbol(const symbol_exprt & sym); - // Add to the list of axioms, lemmas which should hold for the string to be // equal to the given expression. - string_exprt of_expr(const exprt & unrefined_string); + // string_exprt create_string_equal_to_expr(const exprt & unrefined_string); - string_exprt string_of_expr(const exprt & expr); - void string_of_expr(const symbol_exprt & sym, const exprt & str); - string_exprt string_of_symbol(const symbol_exprt & sym); + string_exprt add_axioms_for_string_expr(const exprt & expr); + void set_string_symbol_equal_to_expr(const symbol_exprt & sym, const exprt & str); // The following functions convert different string functions // and add the corresponding lemmas to a list of properties to be checked - exprt function_application(const function_application_exprt &expr); - - string_exprt empty_string(const function_application_exprt &f); - string_exprt string_char_set(const function_application_exprt &expr); - exprt string_char_at(const function_application_exprt &f); - exprt string_code_point_at(const function_application_exprt &f); - exprt string_code_point_before(const function_application_exprt &f); - string_exprt string_copy(const function_application_exprt &f); - string_exprt string_concat(const string_exprt & s1, const string_exprt & s2); - string_exprt string_concat(const function_application_exprt &f); - string_exprt string_concat_int(const function_application_exprt &f); - string_exprt string_concat_long(const function_application_exprt &f); - string_exprt string_concat_bool(const function_application_exprt &f); - string_exprt string_concat_char(const function_application_exprt &f); - string_exprt string_concat_double(const function_application_exprt &f); - string_exprt string_concat_float(const function_application_exprt &f); - string_exprt string_concat_code_point(const function_application_exprt &f); - string_exprt string_constant(irep_idt sval, int char_width, unsignedbv_typet char_type); - exprt string_contains(const function_application_exprt &f); - exprt string_equal(const function_application_exprt &f); - exprt string_equals_ignore_case(const function_application_exprt &f); - exprt string_data(const function_application_exprt &f); - string_exprt string_delete (const string_exprt &str, const exprt & start, const exprt & end); - string_exprt string_delete(const function_application_exprt &expr); - string_exprt string_delete_char_at(const function_application_exprt &expr); - exprt string_hash_code(const function_application_exprt &f); + exprt add_axioms_for_function_application(const function_application_exprt &expr); - // Warning: the specifications are only partial for some of the "index_of" functions - exprt string_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt string_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt string_index_of(const function_application_exprt &f); - exprt string_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt string_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt string_last_index_of(const function_application_exprt &f); - - string_exprt string_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); - string_exprt string_insert(const function_application_exprt &f); - string_exprt string_insert_int(const function_application_exprt &f); - string_exprt string_insert_long(const function_application_exprt &f); - string_exprt string_insert_bool(const function_application_exprt &f); - string_exprt string_insert_char(const function_application_exprt &f); - string_exprt string_insert_double(const function_application_exprt &f); - string_exprt string_insert_float(const function_application_exprt &f); - string_exprt string_insert_char_array(const function_application_exprt &f); - exprt string_is_empty(const function_application_exprt &f); - exprt string_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); - exprt string_is_prefix(const function_application_exprt &f, bool swap_arguments=false); - exprt string_is_suffix(const function_application_exprt &f, bool swap_arguments=false); - exprt string_length(const function_application_exprt &f); - string_exprt string_literal(const function_application_exprt &f); - string_exprt of_int(const function_application_exprt &f); - string_exprt of_int(const exprt &i, size_t max_size); - string_exprt of_int_hex(const exprt &i); - string_exprt of_int_hex(const function_application_exprt &f); - string_exprt of_long(const function_application_exprt &f); - string_exprt of_long(const exprt &i, size_t max_size); - string_exprt of_bool(const function_application_exprt &f); - string_exprt of_bool(const exprt &i); - string_exprt of_char(const function_application_exprt &f); - string_exprt of_char(const exprt &i); - string_exprt of_char_array(const function_application_exprt &f); - string_exprt of_char_array + +private: + + // The following functions add axioms for the returned value + // to be equal to the result of the function given as argument + exprt add_axioms_for_char_at(const function_application_exprt &f); + exprt add_axioms_for_code_point_at(const function_application_exprt &f); + exprt add_axioms_for_code_point_before(const function_application_exprt &f); + exprt add_axioms_for_contains(const function_application_exprt &f); + exprt add_axioms_for_equal(const function_application_exprt &f); + exprt add_axioms_for_equals_ignore_case(const function_application_exprt &f); + exprt add_axioms_for_data(const function_application_exprt &f); + exprt add_axioms_for_hash_code(const function_application_exprt &f); + exprt add_axioms_for_is_empty(const function_application_exprt &f); + exprt add_axioms_for_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt add_axioms_for_is_prefix(const function_application_exprt &f, bool swap_arguments=false); + exprt add_axioms_for_is_suffix(const function_application_exprt &f, bool swap_arguments=false); + exprt add_axioms_for_length(const function_application_exprt &f); + + string_exprt add_axioms_for_empty_string(const function_application_exprt &f); + string_exprt add_axioms_for_char_set(const function_application_exprt &expr); + string_exprt add_axioms_for_copy(const function_application_exprt &f); + string_exprt add_axioms_for_concat(const string_exprt & s1, const string_exprt & s2); + string_exprt add_axioms_for_concat(const function_application_exprt &f); + string_exprt add_axioms_for_concat_int(const function_application_exprt &f); + string_exprt add_axioms_for_concat_long(const function_application_exprt &f); + string_exprt add_axioms_for_concat_bool(const function_application_exprt &f); + string_exprt add_axioms_for_concat_char(const function_application_exprt &f); + string_exprt add_axioms_for_concat_double(const function_application_exprt &f); + string_exprt add_axioms_for_concat_float(const function_application_exprt &f); + string_exprt add_axioms_for_concat_code_point(const function_application_exprt &f); + string_exprt add_axioms_for_constant(irep_idt sval, int char_width, unsignedbv_typet char_type); + string_exprt add_axioms_for_delete (const string_exprt &str, const exprt & start, const exprt & end); + string_exprt add_axioms_for_delete(const function_application_exprt &expr); + string_exprt add_axioms_for_delete_char_at(const function_application_exprt &expr); + + string_exprt add_axioms_for_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); + string_exprt add_axioms_for_insert(const function_application_exprt &f); + string_exprt add_axioms_for_insert_int(const function_application_exprt &f); + string_exprt add_axioms_for_insert_long(const function_application_exprt &f); + string_exprt add_axioms_for_insert_bool(const function_application_exprt &f); + string_exprt add_axioms_for_insert_char(const function_application_exprt &f); + string_exprt add_axioms_for_insert_double(const function_application_exprt &f); + string_exprt add_axioms_for_insert_float(const function_application_exprt &f); + string_exprt add_axioms_for_insert_char_array(const function_application_exprt &f); + + // Add axioms for conversion to string + string_exprt add_axioms_from_literal(const function_application_exprt &f); + string_exprt add_axioms_from_int(const function_application_exprt &f); + string_exprt add_axioms_from_int(const exprt &i, size_t max_size); + string_exprt add_axioms_from_int_hex(const exprt &i); + string_exprt add_axioms_from_int_hex(const function_application_exprt &f); + string_exprt add_axioms_from_long(const function_application_exprt &f); + string_exprt add_axioms_from_long(const exprt &i, size_t max_size); + string_exprt add_axioms_from_bool(const function_application_exprt &f); + string_exprt add_axioms_from_bool(const exprt &i); + string_exprt add_axioms_from_char(const function_application_exprt &f); + string_exprt add_axioms_from_char(const exprt &i); + string_exprt add_axioms_from_char_array(const function_application_exprt &f); + string_exprt add_axioms_from_char_array (const exprt & length, const exprt & data, const exprt & offset, const exprt & count); + // Warning: the specifications are only partial for some of the "index_of" functions + exprt add_axioms_for_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt add_axioms_for_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt add_axioms_for_index_of(const function_application_exprt &f); + exprt add_axioms_for_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); + exprt add_axioms_for_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + exprt add_axioms_for_last_index_of(const function_application_exprt &f); + // Warning: the specifications of these functions is only partial: - string_exprt of_float(const function_application_exprt &f); - string_exprt of_float(const exprt &f, bool double_precision=false); - string_exprt of_double(const function_application_exprt &f); + string_exprt add_axioms_from_float(const function_application_exprt &f); + string_exprt add_axioms_from_float(const exprt &f, bool double_precision=false); + string_exprt add_axioms_from_double(const function_application_exprt &f); - string_exprt string_replace(const function_application_exprt &f); - string_exprt string_set_length(const function_application_exprt &f); + string_exprt add_axioms_for_replace(const function_application_exprt &f); + string_exprt add_axioms_for_set_length(const function_application_exprt &f); // Warning: the specification may not be correct for the case where the string is not long enough - string_exprt string_substring(const string_exprt & str, const exprt & start, const exprt & end); - string_exprt string_substring(const function_application_exprt &expr); + string_exprt add_axioms_for_substring(const string_exprt & str, const exprt & start, const exprt & end); + string_exprt add_axioms_for_substring(const function_application_exprt &expr); - string_exprt string_to_lower_case(const function_application_exprt &expr); - string_exprt string_to_upper_case(const function_application_exprt &expr); - string_exprt string_trim(const function_application_exprt &expr); + string_exprt add_axioms_for_to_lower_case(const function_application_exprt &expr); + string_exprt add_axioms_for_to_upper_case(const function_application_exprt &expr); + string_exprt add_axioms_for_trim(const function_application_exprt &expr); // Warning: not working correctly at the moment - string_exprt string_value_of(const function_application_exprt &f); + string_exprt add_axioms_for_value_of(const function_application_exprt &f); - string_exprt code_point(const exprt &code_point); - string_exprt java_char_array(const exprt & char_array); + string_exprt add_axioms_for_code_point(const exprt &code_point); + string_exprt add_axioms_for_java_char_array(const exprt & char_array); - string_exprt string_if(const if_exprt &expr); - - exprt char_literal(const function_application_exprt &f); + string_exprt add_axioms_for_if(const if_exprt &expr); + exprt add_axioms_for_char_literal(const function_application_exprt &f); // Warning: this function is underspecified - exprt string_code_point_count(const function_application_exprt &f); + exprt add_axioms_for_code_point_count(const function_application_exprt &f); // Warning: this function is underspecified - exprt string_offset_by_code_point(const function_application_exprt &f); - exprt string_parse_int(const function_application_exprt &f); - exprt string_to_char_array(const function_application_exprt &f); + exprt add_axioms_for_offset_by_code_point(const function_application_exprt &f); + exprt add_axioms_for_parse_int(const function_application_exprt &f); + exprt add_axioms_for_to_char_array(const function_application_exprt &f); - exprt string_compare_to(const function_application_exprt &f); + exprt add_axioms_for_compare_to(const function_application_exprt &f); // Warning: this does not work at the moment because of the way we treat string pointers - symbol_exprt string_intern(const function_application_exprt &f); - -private: + symbol_exprt add_axioms_for_intern(const function_application_exprt &f); + + // Which language shoud be used irep_idt mode; // assert that the number of argument is equal to nb and extract them - inline function_application_exprt::argumentst args(const function_application_exprt &expr, size_t nb) + inline static function_application_exprt::argumentst args(const function_application_exprt &expr, size_t nb) { function_application_exprt::argumentst args = expr.arguments(); assert(args.size() == nb); return args; } - exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type); - exprt is_high_surrogate(const exprt & chr); - exprt is_low_surrogate(const exprt & chr); + constant_exprt constant_char(int i) const; + size_t get_char_width() const; + exprt int_of_hex_char(exprt chr, unsigned char_width, typet char_type) const; + exprt is_high_surrogate(const exprt & chr) const; + exprt is_low_surrogate(const exprt & chr) const; + + // Pool used for the intern method std::map pool; + // Used to determine whether hashcode should be equal std::map hash; }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 0e377e712b0..8176b432e35 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -112,7 +112,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) if (refined_string_typet::is_unrefined_string_type(type)) { - string_exprt str = generator.string_of_symbol(to_symbol_expr(expr)); + string_exprt str = generator.find_or_add_string_of_symbol(to_symbol_expr(expr)); bvt bv = convert_bv(str); return bv; } @@ -123,7 +123,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_function_application(const function_application_exprt &expr) { debug() << "string_refinementt::convert_function_application " << pretty_short(expr) << eom; - exprt f = generator.function_application(expr); + exprt f = generator.add_axioms_for_function_application(expr); return convert_bv(f); } @@ -149,7 +149,7 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) if(refined_string_typet::is_unrefined_string_type(type)) { symbol_exprt sym = to_symbol_expr(expr.lhs()); - generator.string_of_expr(sym,expr.rhs()); + generator.set_string_symbol_equal_to_expr(sym,expr.rhs()); return false; } else if(type==ns.follow(expr.rhs().type())) @@ -438,7 +438,7 @@ bool string_refinementt::check_axioms() debug() << "there are " << not_contains_axioms.size() << " not_contains axioms" << eom; for (size_t i = 0; i < not_contains_axioms.size(); ++i) { - exprt val = get(generator.witness_of(not_contains_axioms[i],refined_string_typet::index_zero())); + exprt val = get(generator.get_witness_of(not_contains_axioms[i],refined_string_typet::index_zero())); violated.push_back(std::make_pair(i, val)); } @@ -770,7 +770,7 @@ void string_refinementt::instantiate_not_contains(const string_not_contains_cons { debug() << pretty_short(*it0) << " : " << pretty_short(*it1) << eom; exprt val = minus_exprt(*it0, *it1); - exprt witness = generator.witness_of(axiom,val); + exprt witness = generator.get_witness_of(axiom,val); and_exprt prem_and_is_witness(axiom.premise(), equal_exprt(witness, *it1)); From 4c5d3526d4a2644b2592693cf2f0e927be0fb0fb Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 16:21:27 +0000 Subject: [PATCH 208/221] Using from_integer function from arith_tools.h We use this simpler method instead of converting to a string representing the integer in binary and then using that string to represent a constant. --- .../refinement/string_constraint_generator.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index c71e5fe3d0a..00cb91c7a8e 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -277,16 +277,13 @@ string_exprt string_constraint_generatort::add_axioms_for_constant(irep_idt sval std::wstring utf16 = utf8_to_utf16le(str); for (std::size_t i = 0; i < utf16.size(); ++i) { - std::string idx_binary = integer2binary(i,STRING_SOLVER_INDEX_WIDTH); - constant_exprt idx(idx_binary, refined_string_typet::index_type()); - std::string sval_binary=integer2binary((unsigned)utf16[i], char_width); - constant_exprt c(sval_binary,char_type); + exprt idx = from_integer(i,refined_string_typet::index_type()); + exprt c = from_integer((unsigned)utf16[i], char_type); equal_exprt lemma(res[idx], c); axioms.push_back(lemma); } - std::string s_length_binary = integer2binary(unsigned(utf16.size()),STRING_SOLVER_INDEX_WIDTH); - exprt s_length = constant_exprt(s_length_binary, refined_string_typet::index_type()); + exprt s_length = from_integer(unsigned(utf16.size()), refined_string_typet::index_type()); axioms.push_back(res.has_length(s_length)); return res; @@ -1530,10 +1527,7 @@ exprt string_constraint_generatort::add_axioms_for_char_literal const string_constantt s = to_string_constant(arg.op0().op0().op0()); irep_idt sval = s.get_value(); assert(sval.size() == 1); - - std::string binary=integer2binary(unsigned(sval[0]), STRING_SOLVER_C_CHAR_WIDTH); - - return constant_exprt(binary, get_char_type()); + return from_integer(unsigned(sval[0]), get_char_type()); } else { From 9efef8fd31d0b336b082ee7b754a0c6b2dd9d496 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 16:31:33 +0000 Subject: [PATCH 209/221] Removing duplicate of has_prefix We use has_prefix instead of our own version called starts_with to avoid duplicates --- .../string_constraint_generator.cpp | 124 +++++++++--------- src/solvers/refinement/string_functions.cpp | 7 - src/solvers/refinement/string_functions.h | 1 - 3 files changed, 65 insertions(+), 67 deletions(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 00cb91c7a8e..be14d6ccc2f 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -14,6 +14,12 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include +#include + +bool has_prefix(const irep_idt &s, const irep_idt &prefix) +{ + return has_prefix(id2string(s), id2string(prefix)); +} constant_exprt string_constraint_generatort::constant_char(int i) const { @@ -135,123 +141,123 @@ exprt string_constraint_generatort::add_axioms_for_function_application assert(name.id() == ID_symbol); const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (starts_with(id,cprover_char_literal_func)) + if (has_prefix(id,cprover_char_literal_func)) return add_axioms_for_char_literal(expr); - else if (starts_with(id,cprover_string_length_func)) + else if (has_prefix(id,cprover_string_length_func)) return add_axioms_for_length(expr); - else if (starts_with(id,cprover_string_equal_func)) + else if (has_prefix(id,cprover_string_equal_func)) return add_axioms_for_equal(expr); - else if (starts_with(id,cprover_string_equals_ignore_case_func)) + else if (has_prefix(id,cprover_string_equals_ignore_case_func)) return add_axioms_for_equals_ignore_case(expr); - else if (starts_with(id,cprover_string_is_empty_func)) + else if (has_prefix(id,cprover_string_is_empty_func)) return add_axioms_for_is_empty(expr); - else if (starts_with(id,cprover_string_char_at_func)) + else if (has_prefix(id,cprover_string_char_at_func)) return add_axioms_for_char_at(expr); - else if (starts_with(id,cprover_string_is_prefix_func)) + else if (has_prefix(id,cprover_string_is_prefix_func)) return add_axioms_for_is_prefix(expr); - else if (starts_with(id,cprover_string_is_suffix_func)) + else if (has_prefix(id,cprover_string_is_suffix_func)) return add_axioms_for_is_suffix(expr); - else if (starts_with(id,cprover_string_startswith_func)) + else if (has_prefix(id,cprover_string_startswith_func)) return add_axioms_for_is_prefix(expr,true); - else if (starts_with(id,cprover_string_endswith_func)) + else if (has_prefix(id,cprover_string_endswith_func)) return add_axioms_for_is_suffix(expr,true); - else if (starts_with(id,cprover_string_contains_func)) + else if (has_prefix(id,cprover_string_contains_func)) return add_axioms_for_contains(expr); - else if (starts_with(id,cprover_string_hash_code_func)) + else if (has_prefix(id,cprover_string_hash_code_func)) return add_axioms_for_hash_code(expr); - else if (starts_with(id,cprover_string_index_of_func)) + else if (has_prefix(id,cprover_string_index_of_func)) return add_axioms_for_index_of(expr); - else if (starts_with(id,cprover_string_last_index_of_func)) + else if (has_prefix(id,cprover_string_last_index_of_func)) return add_axioms_for_last_index_of(expr); - else if (starts_with(id,cprover_string_parse_int_func)) + else if (has_prefix(id,cprover_string_parse_int_func)) return add_axioms_for_parse_int(expr); - else if (starts_with(id,cprover_string_to_char_array_func)) + else if (has_prefix(id,cprover_string_to_char_array_func)) return add_axioms_for_to_char_array(expr); - else if (starts_with(id,cprover_string_code_point_at_func)) + else if (has_prefix(id,cprover_string_code_point_at_func)) return add_axioms_for_code_point_at(expr); - else if (starts_with(id,cprover_string_code_point_before_func)) + else if (has_prefix(id,cprover_string_code_point_before_func)) return add_axioms_for_code_point_before(expr); - else if (starts_with(id,cprover_string_code_point_count_func)) + else if (has_prefix(id,cprover_string_code_point_count_func)) return add_axioms_for_code_point_count(expr); - else if (starts_with(id,cprover_string_offset_by_code_point_func)) + else if (has_prefix(id,cprover_string_offset_by_code_point_func)) return add_axioms_for_offset_by_code_point(expr); - else if (starts_with(id,cprover_string_compare_to_func)) + else if (has_prefix(id,cprover_string_compare_to_func)) return add_axioms_for_compare_to(expr); - else if(starts_with(id,cprover_string_literal_func)) + else if(has_prefix(id,cprover_string_literal_func)) return add_axioms_from_literal(expr); - else if(starts_with(id,cprover_string_concat_func)) + else if(has_prefix(id,cprover_string_concat_func)) return add_axioms_for_concat(expr); - else if(starts_with(id,cprover_string_concat_int_func)) + else if(has_prefix(id,cprover_string_concat_int_func)) return add_axioms_for_concat_int(expr); - else if(starts_with(id,cprover_string_concat_long_func)) + else if(has_prefix(id,cprover_string_concat_long_func)) return add_axioms_for_concat_long(expr); - else if(starts_with(id,cprover_string_concat_bool_func)) + else if(has_prefix(id,cprover_string_concat_bool_func)) return add_axioms_for_concat_bool(expr); - else if(starts_with(id,cprover_string_concat_char_func)) + else if(has_prefix(id,cprover_string_concat_char_func)) return add_axioms_for_concat_char(expr); - else if(starts_with(id,cprover_string_concat_double_func)) + else if(has_prefix(id,cprover_string_concat_double_func)) return add_axioms_for_concat_double(expr); - else if(starts_with(id,cprover_string_concat_float_func)) + else if(has_prefix(id,cprover_string_concat_float_func)) return add_axioms_for_concat_float(expr); - else if(starts_with(id,cprover_string_concat_code_point_func)) + else if(has_prefix(id,cprover_string_concat_code_point_func)) return add_axioms_for_concat_code_point(expr); - else if(starts_with(id,cprover_string_insert_func)) + else if(has_prefix(id,cprover_string_insert_func)) return add_axioms_for_insert(expr); - else if(starts_with(id,cprover_string_insert_int_func)) + else if(has_prefix(id,cprover_string_insert_int_func)) return add_axioms_for_insert_int(expr); - else if(starts_with(id,cprover_string_insert_long_func)) + else if(has_prefix(id,cprover_string_insert_long_func)) return add_axioms_for_insert_long(expr); - else if(starts_with(id,cprover_string_insert_bool_func)) + else if(has_prefix(id,cprover_string_insert_bool_func)) return add_axioms_for_insert_bool(expr); - else if(starts_with(id,cprover_string_insert_char_func)) + else if(has_prefix(id,cprover_string_insert_char_func)) return add_axioms_for_insert_char(expr); - else if(starts_with(id,cprover_string_insert_double_func)) + else if(has_prefix(id,cprover_string_insert_double_func)) return add_axioms_for_insert_double(expr); - else if(starts_with(id,cprover_string_insert_float_func)) + else if(has_prefix(id,cprover_string_insert_float_func)) return add_axioms_for_insert_float(expr); - else if(starts_with(id,cprover_string_insert_char_array_func)) + else if(has_prefix(id,cprover_string_insert_char_array_func)) return add_axioms_for_insert_char_array(expr); - else if(starts_with(id,cprover_string_substring_func)) + else if(has_prefix(id,cprover_string_substring_func)) return add_axioms_for_substring(expr); - else if(starts_with(id,cprover_string_trim_func)) + else if(has_prefix(id,cprover_string_trim_func)) return add_axioms_for_trim(expr); - else if(starts_with(id,cprover_string_to_lower_case_func)) + else if(has_prefix(id,cprover_string_to_lower_case_func)) return add_axioms_for_to_lower_case(expr); - else if(starts_with(id,cprover_string_to_upper_case_func)) + else if(has_prefix(id,cprover_string_to_upper_case_func)) return add_axioms_for_to_upper_case(expr); - else if(starts_with(id,cprover_string_char_set_func)) + else if(has_prefix(id,cprover_string_char_set_func)) return add_axioms_for_char_set(expr); - else if(starts_with(id,cprover_string_value_of_func)) + else if(has_prefix(id,cprover_string_value_of_func)) return add_axioms_for_value_of(expr); - else if(starts_with(id,cprover_string_empty_string_func)) + else if(has_prefix(id,cprover_string_empty_string_func)) return add_axioms_for_empty_string(expr); - else if(starts_with(id,cprover_string_copy_func)) + else if(has_prefix(id,cprover_string_copy_func)) return add_axioms_for_copy(expr); - else if(starts_with(id,cprover_string_of_int_func)) + else if(has_prefix(id,cprover_string_of_int_func)) return add_axioms_from_int(expr); - else if(starts_with(id,cprover_string_of_int_hex_func)) + else if(has_prefix(id,cprover_string_of_int_hex_func)) return add_axioms_from_int_hex(expr); - else if(starts_with(id,cprover_string_of_float_func)) + else if(has_prefix(id,cprover_string_of_float_func)) return add_axioms_from_float(expr); - else if(starts_with(id,cprover_string_of_double_func)) + else if(has_prefix(id,cprover_string_of_double_func)) return add_axioms_from_double(expr); - else if(starts_with(id,cprover_string_of_long_func)) + else if(has_prefix(id,cprover_string_of_long_func)) return add_axioms_from_long(expr); - else if(starts_with(id,cprover_string_of_bool_func)) + else if(has_prefix(id,cprover_string_of_bool_func)) return add_axioms_from_bool(expr); - else if(starts_with(id,cprover_string_of_char_func)) + else if(has_prefix(id,cprover_string_of_char_func)) return add_axioms_from_char(expr); - else if(starts_with(id,cprover_string_of_char_array_func)) + else if(has_prefix(id,cprover_string_of_char_array_func)) return add_axioms_from_char_array(expr); - else if(starts_with(id,cprover_string_set_length_func)) + else if(has_prefix(id,cprover_string_set_length_func)) return add_axioms_for_set_length(expr); - else if(starts_with(id,cprover_string_delete_func)) + else if(has_prefix(id,cprover_string_delete_func)) return add_axioms_for_delete(expr); - else if(starts_with(id,cprover_string_delete_char_at_func)) + else if(has_prefix(id,cprover_string_delete_char_at_func)) return add_axioms_for_delete_char_at(expr); - else if(starts_with(id,cprover_string_replace_func)) + else if(has_prefix(id,cprover_string_replace_func)) return add_axioms_for_replace(expr); - else if(starts_with(id,cprover_string_data_func)) + else if(has_prefix(id,cprover_string_data_func)) return add_axioms_for_data(expr); else { diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp index f3383f436f0..a2133e65f50 100644 --- a/src/solvers/refinement/string_functions.cpp +++ b/src/solvers/refinement/string_functions.cpp @@ -10,10 +10,3 @@ Date: September 2016 #include -bool starts_with(irep_idt id, irep_idt prefix) { - std::string s = id2string(id); - std::string t = id2string(prefix); - for(int i = 0; i < t.length(); i++) - if(s[i] != t[i]) return false; - return true; -} diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h index 83786de2098..a2a62fff90d 100644 --- a/src/solvers/refinement/string_functions.h +++ b/src/solvers/refinement/string_functions.h @@ -13,7 +13,6 @@ Date: September 2016 #include -bool starts_with(irep_idt id, irep_idt prefix); const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_char_literal_func"); const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_string_literal_func"); const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_string_char_at_func"); From c81641afc803acc0011bc32ef84a969c282f7173 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 13 Dec 2016 16:53:55 +0000 Subject: [PATCH 210/221] Defining ids for string function in util/irep Instead of defining them manually in string_functions.h we do it has the other ids are generated. Removing the string_functions.* file, that are now useless Getting rid of has_prefix in string constraint generator We remove from function ids the suffix that were inserted during goto-program processing so that we can use equality to identify string functions instead of has_prefix. We now also take into account the C functions in pass preprocessing in a similar way to java string functions. --- regression/strings/cprover-string-hack.h | 2 +- regression/strings/test1/test.c | 4 +- regression/strings/test3.3/test.c | 2 +- regression/strings/test3/test.c | 2 +- regression/strings/test3/test.desc | 2 +- regression/strings/test4/test.c | 2 +- regression/strings/test_concat/test.c | 4 +- regression/strings/test_concat/test.desc | 4 +- regression/strings/test_index_of/test.c | 2 +- src/goto-programs/pass_preprocess.cpp | 221 ++++++++++-------- src/goto-programs/pass_preprocess.h | 1 + src/solvers/Makefile | 1 - .../string_constraint_generator.cpp | 140 ++++++----- src/solvers/refinement/string_expr.h | 1 - src/solvers/refinement/string_functions.cpp | 12 - src/solvers/refinement/string_functions.h | 78 ------- src/util/irep_ids.txt | 61 +++++ 17 files changed, 268 insertions(+), 271 deletions(-) delete mode 100644 src/solvers/refinement/string_functions.cpp delete mode 100644 src/solvers/refinement/string_functions.h diff --git a/regression/strings/cprover-string-hack.h b/regression/strings/cprover-string-hack.h index 136633390b5..86da5dd638d 100644 --- a/regression/strings/cprover-string-hack.h +++ b/regression/strings/cprover-string-hack.h @@ -56,7 +56,7 @@ typedef unsigned char __CPROVER_char; ******************************************************************************/ extern __CPROVER_char __CPROVER_uninterpreted_string_char_at_func(__CPROVER_string str, int pos); extern __CPROVER_bool __CPROVER_uninterpreted_string_equal_func(__CPROVER_string str1, __CPROVER_string str2); -extern __CPROVER_string __CPROVER_uninterpreted_string_literal_func(); +extern __CPROVER_string __CPROVER_uninterpreted_string_literal_func(char * str); extern __CPROVER_char __CPROVER_uninterpreted_char_literal_func(); extern __CPROVER_string __CPROVER_uninterpreted_string_concat_func(__CPROVER_string str1, __CPROVER_string str2); extern int __CPROVER_uninterpreted_string_length_func(__CPROVER_string str); diff --git a/regression/strings/test1/test.c b/regression/strings/test1/test.c index d3830e38a3f..c5e10eb1fc7 100644 --- a/regression/strings/test1/test.c +++ b/regression/strings/test1/test.c @@ -5,13 +5,13 @@ int main() { __CPROVER_string s; - __CPROVER_char c1, c2; + char c1, c2; int i; int j; i = 2; s = __CPROVER_string_literal("pippo"); c1 = __CPROVER_char_at(s, i); - c2 = __CPROVER_char_literal("p"); + c2 = 'p'; assert (c1 == c2); assert (c1 != c2); return 0; diff --git a/regression/strings/test3.3/test.c b/regression/strings/test3.3/test.c index 35e25d82ee5..bef96c6cd4e 100644 --- a/regression/strings/test3.3/test.c +++ b/regression/strings/test3.3/test.c @@ -16,7 +16,7 @@ int main() // proving the assertions individually seems to be much faster //assert(__CPROVER_string_length(s) == i + 5); //assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"), s)); - assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + assert(__CPROVER_char_at(s, i) == 'p'); return 0; } diff --git a/regression/strings/test3/test.c b/regression/strings/test3/test.c index 2fa4b22e017..cbfc398099e 100644 --- a/regression/strings/test3/test.c +++ b/regression/strings/test3/test.c @@ -14,7 +14,7 @@ int main() assert(__CPROVER_string_length(s) == i + 5); assert(__CPROVER_string_issuffix(__CPROVER_string_literal("po"),s)); - assert(__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")); + assert(__CPROVER_char_at(s, i) == 'p'); assert(__CPROVER_string_issuffix(__CPROVER_string_literal("p!o"), s)); return 0; diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index a6895e71aea..8d4c38f4fb0 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -5,6 +5,6 @@ test.c ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length(s) == i + 5: SUCCESS$ ^\[main.assertion.2\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"po\"),s): SUCCESS$ -^\[main.assertion.3\] assertion __CPROVER_char_at(s, i) == __CPROVER_char_literal(\"p\"): SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_char_at(s, i) == 'p': SUCCESS$ ^\[main.assertion.4\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"p!o\"), s): FAILURE$ -- diff --git a/regression/strings/test4/test.c b/regression/strings/test4/test.c index d73324f8ef4..3c768717823 100644 --- a/regression/strings/test4/test.c +++ b/regression/strings/test4/test.c @@ -9,7 +9,7 @@ int main() int j; i = 2; s = __CPROVER_string_literal("pippo"); - if (__CPROVER_char_at(s, i) == __CPROVER_char_literal("p")) { + if (__CPROVER_char_at(s, i) == 'p') { j = 1; } assert(j == 1); diff --git a/regression/strings/test_concat/test.c b/regression/strings/test_concat/test.c index 007b9ca1b5c..923bffb46ae 100644 --- a/regression/strings/test_concat/test.c +++ b/regression/strings/test_concat/test.c @@ -10,7 +10,7 @@ int main() u = __CPROVER_string_concat(s, t); __CPROVER_char c = __CPROVER_char_at(u,i); - assert(c == __CPROVER_char_literal("p")); - assert(__CPROVER_char_at(u,2) == __CPROVER_char_literal("p")); + assert(c == 'p'); + assert(__CPROVER_char_at(u,2) == 'p'); return 0; } diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 499e1fe9e46..78baa04b9e9 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -3,6 +3,6 @@ test.c --pass ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion c == __CPROVER_char_literal("p"): SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_char_at(u,2) == __CPROVER_char_literal("p"): FAILURE$ +^\[main.assertion.1\] assertion c == 'p': SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_char_at(u,2) == 'p': FAILURE$ -- diff --git a/regression/strings/test_index_of/test.c b/regression/strings/test_index_of/test.c index d64d3c2d66e..c182e7952ab 100644 --- a/regression/strings/test_index_of/test.c +++ b/regression/strings/test_index_of/test.c @@ -7,7 +7,7 @@ int main(){ __CPROVER_string str; int firstSlash = __CPROVER_string_index_of(str,'/'); //__CPROVER_char_literal("/")); - int lastSlash = __CPROVER_string_last_index_of(str,__CPROVER_char_literal("/")); + int lastSlash = __CPROVER_string_last_index_of(str,'/'); __CPROVER_assume(__CPROVER_string_equal(str, __CPROVER_string_literal("abc/abc/abc"))); diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/pass_preprocess.cpp index f18982780bd..67ac3b497cc 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/pass_preprocess.cpp @@ -14,7 +14,6 @@ Date: September 2016 #include #include #include -#include #include symbol_exprt pass_preprocesst::new_tmp_symbol @@ -133,12 +132,12 @@ void pass_preprocesst::make_to_char_array_function new_code.push_back(assign_malloc); // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - declare_function(cprover_string_length_func,unsignedbv_typet(32)); + declare_function(ID_cprover_string_length_func,unsignedbv_typet(32)); function_application_exprt call_to_length; call_to_length.type()=unsignedbv_typet(32); call_to_length.add_source_location()=location; - call_to_length.function()=symbol_exprt(cprover_string_length_func); + call_to_length.function()=symbol_exprt(ID_cprover_string_length_func); call_to_length.arguments().push_back(string_argument); const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); @@ -157,12 +156,12 @@ void pass_preprocesst::make_to_char_array_function symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); new_code.push_back(code_assignt(data, data_cpp_new_expr)); - // tmp_assign->data = __CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); - declare_function(cprover_string_data_func,void_typet()); + // tmp_assign->data = __ID_CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); + declare_function(ID_cprover_string_data_func,void_typet()); function_application_exprt call_to_data; call_to_data.type()=void_typet(); call_to_data.add_source_location()=location; - call_to_data.function()=symbol_exprt(cprover_string_data_func); + call_to_data.function()=symbol_exprt(ID_cprover_string_data_func); call_to_data.arguments().push_back(string_argument); call_to_data.arguments().push_back(data); call_to_data.arguments().push_back(dereference_exprt(data)); @@ -285,9 +284,26 @@ void pass_preprocesst::replace_string_calls { if(i_it->is_assign()) { + code_assignt assignment = to_code_assign(i_it->code); exprt new_rhs = replace_string_literals(assignment.rhs()); code_assignt new_assignment(assignment.lhs(),new_rhs); + + if(new_rhs.id()==ID_function_application) + { + function_application_exprt f=to_function_application_expr(new_rhs); + const exprt &name=f.function(); + assert(name.id()==ID_symbol); + const irep_idt &id=to_symbol_expr(name).get_identifier(); + auto it=c_string_functions.find(id); + if(it!=c_string_functions.end()) + { + declare_function(it->second, f.type()); + f.function()=symbol_exprt(it->second); + new_assignment=code_assignt(assignment.lhs(),f); + } + } + new_assignment.add_source_location()=assignment.source_location(); i_it->make_assignment(); i_it->code=new_assignment; @@ -322,13 +338,13 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) function_application_exprt rhs; rhs.type()=expr.type(); rhs.add_source_location()=expr.source_location(); - rhs.function()=symbol_exprt(cprover_string_literal_func); - goto_functions.function_map[cprover_string_literal_func]; + rhs.function()=symbol_exprt(ID_cprover_string_literal_func); + goto_functions.function_map[ID_cprover_string_literal_func]; rhs.arguments().push_back(address_of_exprt(expr.op0())); auxiliary_symbolt tmp_symbol; tmp_symbol.is_static_lifetime=false; tmp_symbol.mode=ID_java; - tmp_symbol.name=cprover_string_literal_func; + tmp_symbol.name=ID_cprover_string_literal_func; symbol_table.add(tmp_symbol); return rhs; } @@ -344,91 +360,108 @@ pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_function { // initialiasing the function maps - string_functions[irep_idt("java::java.lang.String.codePointAt:(I)I")] = cprover_string_code_point_at_func; - string_functions[irep_idt("java::java.lang.String.codePointBefore:(I)I")] = cprover_string_code_point_before_func; - string_functions[irep_idt("java::java.lang.String.codePointCount:(II)I")] = cprover_string_code_point_count_func; - string_functions[irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")] = cprover_string_offset_by_code_point_func; - string_functions[irep_idt("java::java.lang.String.hashCode:()I")] = cprover_string_hash_code_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(I)I")] = cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(II)I")] = cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;)I")] = cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;I)I")] = cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(I)I")]=cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(II)I")]=cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]=cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]=cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")] = cprover_string_concat_func; - string_functions[irep_idt("java::java.lang.String.length:()I")] = cprover_string_length_func; - string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = cprover_string_length_func; - string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = cprover_string_equal_func; - string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = cprover_string_equals_ignore_case_func; - string_functions[irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")] = cprover_string_startswith_func; - string_functions[irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z")] = cprover_string_startswith_func; - string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = cprover_string_endswith_func; - string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;")] = cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = cprover_string_trim_func; - string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = cprover_string_to_lower_case_func; - string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = cprover_string_to_upper_case_func; - string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = cprover_string_replace_func; - string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = cprover_string_contains_func; - string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = cprover_string_compare_to_func; - string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = cprover_string_intern_func; - string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = cprover_string_is_empty_func; - string_functions[irep_idt("java::java.lang.String.charAt:(I)C")] = cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.StringBuilder.charAt:(I)C")] = cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.CharSequence.charAt:(I)C")] = cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = cprover_string_copy_func; - - string_functions[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = cprover_string_of_float_func; - string_functions[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = cprover_string_of_float_func; - string_functions[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = cprover_string_of_int_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = cprover_string_of_int_func; - string_functions[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = cprover_string_of_int_hex_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = cprover_string_of_long_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = cprover_string_of_double_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = cprover_string_of_bool_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = cprover_string_of_char_func; - string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = cprover_string_parse_int_func; - - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_concat_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = cprover_string_char_set_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_int_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")] = cprover_string_concat_long_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")] = cprover_string_concat_bool_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")] = cprover_string_concat_char_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")] = cprover_string_concat_double_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")] = cprover_string_concat_float_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")] = cprover_string_concat_code_point_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")] = cprover_string_delete_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")] = cprover_string_delete_char_at_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")] = cprover_string_insert_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")] = cprover_string_insert_int_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")] = cprover_string_insert_long_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = cprover_string_insert_bool_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.setLength:(I)V")] = cprover_string_set_length_func; - - - side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[CII)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_array_func; - side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[C)Ljava/lang/StringBuilder;")] = cprover_string_insert_char_array_func; - - string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")] = cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")] = cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.String.:()V")] = cprover_string_empty_string_func; - string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = cprover_string_empty_string_func; - - string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([C)V")] = cprover_string_of_char_array_func; - string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")] = cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = cprover_string_of_char_array_func; + string_functions[irep_idt("java::java.lang.String.codePointAt:(I)I")] = ID_cprover_string_code_point_at_func; + string_functions[irep_idt("java::java.lang.String.codePointBefore:(I)I")] = ID_cprover_string_code_point_before_func; + string_functions[irep_idt("java::java.lang.String.codePointCount:(II)I")] = ID_cprover_string_code_point_count_func; + string_functions[irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")] = ID_cprover_string_offset_by_code_point_func; + string_functions[irep_idt("java::java.lang.String.hashCode:()I")] = ID_cprover_string_hash_code_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(I)I")] = ID_cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(II)I")] = ID_cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;)I")] = ID_cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;I)I")] = ID_cprover_string_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(I)I")]=ID_cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(II)I")]=ID_cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]=ID_cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]=ID_cprover_string_last_index_of_func; + string_functions[irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")] = ID_cprover_string_concat_func; + string_functions[irep_idt("java::java.lang.String.length:()I")] = ID_cprover_string_length_func; + string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = ID_cprover_string_length_func; + string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = ID_cprover_string_equal_func; + string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = ID_cprover_string_equals_ignore_case_func; + string_functions[irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")] = ID_cprover_string_startswith_func; + string_functions[irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z")] = ID_cprover_string_startswith_func; + string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = ID_cprover_string_endswith_func; + string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;")] = ID_cprover_string_substring_func; + string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = ID_cprover_string_trim_func; + string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = ID_cprover_string_to_lower_case_func; + string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = ID_cprover_string_to_upper_case_func; + string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = ID_cprover_string_replace_func; + string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = ID_cprover_string_contains_func; + string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = ID_cprover_string_compare_to_func; + string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = ID_cprover_string_intern_func; + string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = ID_cprover_string_is_empty_func; + string_functions[irep_idt("java::java.lang.String.charAt:(I)C")] = ID_cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.StringBuilder.charAt:(I)C")] = ID_cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.CharSequence.charAt:(I)C")] = ID_cprover_string_char_at_func; + string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = ID_cprover_string_copy_func; + + string_functions[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = ID_cprover_string_of_float_func; + string_functions[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = ID_cprover_string_of_float_func; + string_functions[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_func; + string_functions[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_hex_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = ID_cprover_string_of_long_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = ID_cprover_string_of_double_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = ID_cprover_string_of_bool_func; + string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = ID_cprover_string_of_char_func; + string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = ID_cprover_string_parse_int_func; + + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = ID_cprover_string_char_set_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_int_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_long_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_bool_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_char_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_double_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_float_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_code_point_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")] = ID_cprover_string_delete_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_delete_char_at_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_int_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_long_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = ID_cprover_string_insert_bool_func; + side_effect_functions[irep_idt("java::java.lang.StringBuilder.setLength:(I)V")] = ID_cprover_string_set_length_func; + + + side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[CII)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_array_func; + side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[C)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_array_func; + + string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")] = ID_cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")] = ID_cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = ID_cprover_string_copy_func; + string_function_calls[irep_idt("java::java.lang.String.:()V")] = ID_cprover_string_empty_string_func; + string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = ID_cprover_string_empty_string_func; + + string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([C)V")] = ID_cprover_string_of_char_array_func; + string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = ID_cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; + string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; + + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_literal_func")]=ID_cprover_string_literal_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_char_at_func")]=ID_cprover_string_char_at_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_equal_func")]=ID_cprover_string_equal_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_concat_func")]=ID_cprover_string_concat_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_length_func")]=ID_cprover_string_length_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_substring_func")]=ID_cprover_string_substring_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_is_prefix_func")]=ID_cprover_string_is_prefix_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_is_suffix_func")]=ID_cprover_string_is_suffix_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_contains_func")]=ID_cprover_string_contains_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_index_of_func")]=ID_cprover_string_index_of_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_last_index_of_func")]=ID_cprover_string_last_index_of_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_char_set_func")]=ID_cprover_string_char_set_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_copy_func")]=ID_cprover_string_copy_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_parse_int_func")]=ID_cprover_string_parse_int_func; + c_string_functions[irep_idt("__CPROVER_uninterpreted_string_of_int_func")]=ID_cprover_string_of_int_func; + Forall_goto_functions(it, goto_functions) replace_string_calls(it); diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/pass_preprocess.h index 5041e00e3dd..980990e83e5 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/pass_preprocess.h @@ -24,6 +24,7 @@ class pass_preprocesst:public messaget std::map string_builders; std::map side_effect_functions; std::map string_functions; + std::map c_string_functions; std::map string_function_calls; std::map string_of_char_array_functions; std::map string_of_char_array_function_calls; diff --git a/src/solvers/Makefile b/src/solvers/Makefile index aadf2307495..002902d8a0c 100644 --- a/src/solvers/Makefile +++ b/src/solvers/Makefile @@ -119,7 +119,6 @@ SRC = $(CHAFF_SRC) $(BOOLEFORCE_SRC) $(MINISAT_SRC) $(MINISAT2_SRC) \ refinement/bv_refinement_loop.cpp refinement/refine_arithmetic.cpp \ refinement/refine_arrays.cpp \ refinement/string_constraint.cpp \ - refinement/string_functions.cpp \ refinement/refined_string_type.cpp \ refinement/string_expr.cpp \ refinement/string_refinement.cpp \ diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index be14d6ccc2f..8bfd77afaf7 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -15,11 +15,7 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include #include - -bool has_prefix(const irep_idt &s, const irep_idt &prefix) -{ - return has_prefix(id2string(s), id2string(prefix)); -} +#include constant_exprt string_constraint_generatort::constant_char(int i) const { @@ -140,124 +136,126 @@ exprt string_constraint_generatort::add_axioms_for_function_application const exprt &name = expr.function(); assert(name.id() == ID_symbol); - const irep_idt &id = to_symbol_expr(name).get_identifier(); - if (has_prefix(id,cprover_char_literal_func)) + const irep_idt &id = is_ssa_expr(name)?to_ssa_expr(name).get_object_name(): + to_symbol_expr(name).get_identifier(); + + if (id==ID_cprover_char_literal_func) return add_axioms_for_char_literal(expr); - else if (has_prefix(id,cprover_string_length_func)) + else if (id==ID_cprover_string_length_func) return add_axioms_for_length(expr); - else if (has_prefix(id,cprover_string_equal_func)) + else if (id==ID_cprover_string_equal_func) return add_axioms_for_equal(expr); - else if (has_prefix(id,cprover_string_equals_ignore_case_func)) + else if (id==ID_cprover_string_equals_ignore_case_func) return add_axioms_for_equals_ignore_case(expr); - else if (has_prefix(id,cprover_string_is_empty_func)) + else if (id==ID_cprover_string_is_empty_func) return add_axioms_for_is_empty(expr); - else if (has_prefix(id,cprover_string_char_at_func)) + else if (id==ID_cprover_string_char_at_func) return add_axioms_for_char_at(expr); - else if (has_prefix(id,cprover_string_is_prefix_func)) + else if (id==ID_cprover_string_is_prefix_func) return add_axioms_for_is_prefix(expr); - else if (has_prefix(id,cprover_string_is_suffix_func)) + else if (id==ID_cprover_string_is_suffix_func) return add_axioms_for_is_suffix(expr); - else if (has_prefix(id,cprover_string_startswith_func)) + else if (id==ID_cprover_string_startswith_func) return add_axioms_for_is_prefix(expr,true); - else if (has_prefix(id,cprover_string_endswith_func)) + else if (id==ID_cprover_string_endswith_func) return add_axioms_for_is_suffix(expr,true); - else if (has_prefix(id,cprover_string_contains_func)) + else if (id==ID_cprover_string_contains_func) return add_axioms_for_contains(expr); - else if (has_prefix(id,cprover_string_hash_code_func)) + else if (id==ID_cprover_string_hash_code_func) return add_axioms_for_hash_code(expr); - else if (has_prefix(id,cprover_string_index_of_func)) + else if (id==ID_cprover_string_index_of_func) return add_axioms_for_index_of(expr); - else if (has_prefix(id,cprover_string_last_index_of_func)) + else if (id==ID_cprover_string_last_index_of_func) return add_axioms_for_last_index_of(expr); - else if (has_prefix(id,cprover_string_parse_int_func)) + else if (id==ID_cprover_string_parse_int_func) return add_axioms_for_parse_int(expr); - else if (has_prefix(id,cprover_string_to_char_array_func)) + else if (id==ID_cprover_string_to_char_array_func) return add_axioms_for_to_char_array(expr); - else if (has_prefix(id,cprover_string_code_point_at_func)) + else if (id==ID_cprover_string_code_point_at_func) return add_axioms_for_code_point_at(expr); - else if (has_prefix(id,cprover_string_code_point_before_func)) + else if (id==ID_cprover_string_code_point_before_func) return add_axioms_for_code_point_before(expr); - else if (has_prefix(id,cprover_string_code_point_count_func)) + else if (id==ID_cprover_string_code_point_count_func) return add_axioms_for_code_point_count(expr); - else if (has_prefix(id,cprover_string_offset_by_code_point_func)) + else if (id==ID_cprover_string_offset_by_code_point_func) return add_axioms_for_offset_by_code_point(expr); - else if (has_prefix(id,cprover_string_compare_to_func)) + else if (id==ID_cprover_string_compare_to_func) return add_axioms_for_compare_to(expr); - else if(has_prefix(id,cprover_string_literal_func)) + else if(id==ID_cprover_string_literal_func) return add_axioms_from_literal(expr); - else if(has_prefix(id,cprover_string_concat_func)) + else if(id==ID_cprover_string_concat_func) return add_axioms_for_concat(expr); - else if(has_prefix(id,cprover_string_concat_int_func)) + else if(id==ID_cprover_string_concat_int_func) return add_axioms_for_concat_int(expr); - else if(has_prefix(id,cprover_string_concat_long_func)) + else if(id==ID_cprover_string_concat_long_func) return add_axioms_for_concat_long(expr); - else if(has_prefix(id,cprover_string_concat_bool_func)) + else if(id==ID_cprover_string_concat_bool_func) return add_axioms_for_concat_bool(expr); - else if(has_prefix(id,cprover_string_concat_char_func)) + else if(id==ID_cprover_string_concat_char_func) return add_axioms_for_concat_char(expr); - else if(has_prefix(id,cprover_string_concat_double_func)) + else if(id==ID_cprover_string_concat_double_func) return add_axioms_for_concat_double(expr); - else if(has_prefix(id,cprover_string_concat_float_func)) + else if(id==ID_cprover_string_concat_float_func) return add_axioms_for_concat_float(expr); - else if(has_prefix(id,cprover_string_concat_code_point_func)) + else if(id==ID_cprover_string_concat_code_point_func) return add_axioms_for_concat_code_point(expr); - else if(has_prefix(id,cprover_string_insert_func)) + else if(id==ID_cprover_string_insert_func) return add_axioms_for_insert(expr); - else if(has_prefix(id,cprover_string_insert_int_func)) + else if(id==ID_cprover_string_insert_int_func) return add_axioms_for_insert_int(expr); - else if(has_prefix(id,cprover_string_insert_long_func)) + else if(id==ID_cprover_string_insert_long_func) return add_axioms_for_insert_long(expr); - else if(has_prefix(id,cprover_string_insert_bool_func)) + else if(id==ID_cprover_string_insert_bool_func) return add_axioms_for_insert_bool(expr); - else if(has_prefix(id,cprover_string_insert_char_func)) + else if(id==ID_cprover_string_insert_char_func) return add_axioms_for_insert_char(expr); - else if(has_prefix(id,cprover_string_insert_double_func)) + else if(id==ID_cprover_string_insert_double_func) return add_axioms_for_insert_double(expr); - else if(has_prefix(id,cprover_string_insert_float_func)) + else if(id==ID_cprover_string_insert_float_func) return add_axioms_for_insert_float(expr); - else if(has_prefix(id,cprover_string_insert_char_array_func)) + else if(id==ID_cprover_string_insert_char_array_func) return add_axioms_for_insert_char_array(expr); - else if(has_prefix(id,cprover_string_substring_func)) + else if(id==ID_cprover_string_substring_func) return add_axioms_for_substring(expr); - else if(has_prefix(id,cprover_string_trim_func)) + else if(id==ID_cprover_string_trim_func) return add_axioms_for_trim(expr); - else if(has_prefix(id,cprover_string_to_lower_case_func)) + else if(id==ID_cprover_string_to_lower_case_func) return add_axioms_for_to_lower_case(expr); - else if(has_prefix(id,cprover_string_to_upper_case_func)) + else if(id==ID_cprover_string_to_upper_case_func) return add_axioms_for_to_upper_case(expr); - else if(has_prefix(id,cprover_string_char_set_func)) + else if(id==ID_cprover_string_char_set_func) return add_axioms_for_char_set(expr); - else if(has_prefix(id,cprover_string_value_of_func)) + else if(id==ID_cprover_string_value_of_func) return add_axioms_for_value_of(expr); - else if(has_prefix(id,cprover_string_empty_string_func)) + else if(id==ID_cprover_string_empty_string_func) return add_axioms_for_empty_string(expr); - else if(has_prefix(id,cprover_string_copy_func)) + else if(id==ID_cprover_string_copy_func) return add_axioms_for_copy(expr); - else if(has_prefix(id,cprover_string_of_int_func)) + else if(id==ID_cprover_string_of_int_func) return add_axioms_from_int(expr); - else if(has_prefix(id,cprover_string_of_int_hex_func)) + else if(id==ID_cprover_string_of_int_hex_func) return add_axioms_from_int_hex(expr); - else if(has_prefix(id,cprover_string_of_float_func)) + else if(id==ID_cprover_string_of_float_func) return add_axioms_from_float(expr); - else if(has_prefix(id,cprover_string_of_double_func)) + else if(id==ID_cprover_string_of_double_func) return add_axioms_from_double(expr); - else if(has_prefix(id,cprover_string_of_long_func)) + else if(id==ID_cprover_string_of_long_func) return add_axioms_from_long(expr); - else if(has_prefix(id,cprover_string_of_bool_func)) + else if(id==ID_cprover_string_of_bool_func) return add_axioms_from_bool(expr); - else if(has_prefix(id,cprover_string_of_char_func)) + else if(id==ID_cprover_string_of_char_func) return add_axioms_from_char(expr); - else if(has_prefix(id,cprover_string_of_char_array_func)) + else if(id==ID_cprover_string_of_char_array_func) return add_axioms_from_char_array(expr); - else if(has_prefix(id,cprover_string_set_length_func)) + else if(id==ID_cprover_string_set_length_func) return add_axioms_for_set_length(expr); - else if(has_prefix(id,cprover_string_delete_func)) + else if(id==ID_cprover_string_delete_func) return add_axioms_for_delete(expr); - else if(has_prefix(id,cprover_string_delete_char_at_func)) + else if(id==ID_cprover_string_delete_char_at_func) return add_axioms_for_delete_char_at(expr); - else if(has_prefix(id,cprover_string_replace_func)) + else if(id==ID_cprover_string_replace_func) return add_axioms_for_replace(expr); - else if(has_prefix(id,cprover_string_data_func)) + else if(id==ID_cprover_string_data_func) return add_axioms_for_data(expr); else { @@ -313,15 +311,12 @@ string_exprt string_constraint_generatort::add_axioms_from_literal(const functio irep_idt sval; int char_width; unsignedbv_typet char_type; - if (arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) + arg.op0().operands().size() == 2 && + arg.op0().op0().id() == ID_string_constant) { // C string constant - - const exprt &s = arg.op0().op0().op0(); + const exprt &s = arg.op0().op0(); sval = to_string_constant(s).get_value(); char_width = STRING_SOLVER_C_CHAR_WIDTH; char_type = refined_string_typet::char_type(); @@ -1420,7 +1415,7 @@ exprt string_constraint_generatort::add_axioms_for_index_of_string(const string_ symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); axioms.push_back (string_constraintt(qvar, substring.length(), contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]))); - + return offset; } @@ -1818,4 +1813,3 @@ void string_constraint_generatort::set_string_symbol_equal_to_expr(const symbol_ else assign_to_symbol(sym,add_axioms_for_string_expr(str)); } - diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index 25d11464de7..f5fb3c05221 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -14,7 +14,6 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -#include #include diff --git a/src/solvers/refinement/string_functions.cpp b/src/solvers/refinement/string_functions.cpp deleted file mode 100644 index a2133e65f50..00000000000 --- a/src/solvers/refinement/string_functions.cpp +++ /dev/null @@ -1,12 +0,0 @@ -/*******************************************************************\ - -Module: Defines identifiers for string functions - -Author: Romain Brenguier - -Date: September 2016 - -\*******************************************************************/ - -#include - diff --git a/src/solvers/refinement/string_functions.h b/src/solvers/refinement/string_functions.h deleted file mode 100644 index a2a62fff90d..00000000000 --- a/src/solvers/refinement/string_functions.h +++ /dev/null @@ -1,78 +0,0 @@ -/*******************************************************************\ - -Module: Defines identifiers for string functions - -Author: Romain Brenguier - -Date: September 2016 - -\*******************************************************************/ - -#ifndef CPROVER_STRING_FUNCTIONS_H -#define CPROVER_STRING_FUNCTIONS_H - -#include - -const irep_idt cprover_char_literal_func("__CPROVER_uninterpreted_char_literal_func"); -const irep_idt cprover_string_literal_func("__CPROVER_uninterpreted_string_literal_func"); -const irep_idt cprover_string_char_at_func("__CPROVER_uninterpreted_string_char_at_func"); -const irep_idt cprover_string_char_set_func("__CPROVER_uninterpreted_string_char_set_func"); -const irep_idt cprover_string_code_point_at_func("__CPROVER_uninterpreted_string_code_point_at_func"); -const irep_idt cprover_string_code_point_before_func("__CPROVER_uninterpreted_string_code_point_before_func"); -const irep_idt cprover_string_code_point_count_func("__CPROVER_uninterpreted_string_code_point_count_func"); -const irep_idt cprover_string_offset_by_code_point_func("__CPROVER_uninterpreted_string_offset_by_code_point_func"); -const irep_idt cprover_string_compare_to_func("__CPROVER_uninterpreted_string_compare_to_func"); -const irep_idt cprover_string_concat_func("__CPROVER_uninterpreted_string_concat_func"); -const irep_idt cprover_string_concat_int_func("__CPROVER_uninterpreted_string_concat_int_func"); -const irep_idt cprover_string_concat_long_func("__CPROVER_uninterpreted_string_concat_long_func"); -const irep_idt cprover_string_concat_char_func("__CPROVER_uninterpreted_string_concat_char_func"); -const irep_idt cprover_string_concat_bool_func("__CPROVER_uninterpreted_string_concat_bool_func"); -const irep_idt cprover_string_concat_double_func("__CPROVER_uninterpreted_string_concat_double_func"); -const irep_idt cprover_string_concat_float_func("__CPROVER_uninterpreted_string_concat_float_func"); -const irep_idt cprover_string_concat_code_point_func("__CPROVER_uninterpreted_string_concat_code_point_func"); -const irep_idt cprover_string_contains_func("__CPROVER_uninterpreted_string_contains_func"); -const irep_idt cprover_string_copy_func("__CPROVER_uninterpreted_string_copy_func"); -const irep_idt cprover_string_delete_func("__CPROVER_uninterpreted_string_delete_func"); -const irep_idt cprover_string_delete_char_at_func("__CPROVER_uninterpreted_string_delete_char_at_func"); -const irep_idt cprover_string_equal_func("__CPROVER_uninterpreted_string_equal_func"); -const irep_idt cprover_string_equals_ignore_case_func("__CPROVER_uninterpreted_string_equals_ignore_case_func"); -const irep_idt cprover_string_empty_string_func("__CPROVER_uninterpreted_string_empty_string_func"); -const irep_idt cprover_string_endswith_func("__CPROVER_uninterpreted_string_endswith_func"); -const irep_idt cprover_string_format_func("__CPROVER_uninterpreted_string_format_func"); -const irep_idt cprover_string_hash_code_func("__CPROVER_uninterpreted_string_hash_code_func"); -const irep_idt cprover_string_index_of_func("__CPROVER_uninterpreted_string_index_of_func"); -const irep_idt cprover_string_intern_func("__CPROVER_uninterpreted_string_intern_func"); -const irep_idt cprover_string_insert_func("__CPROVER_uninterpreted_string_insert_func"); -const irep_idt cprover_string_insert_int_func("__CPROVER_uninterpreted_string_insert_int_func"); -const irep_idt cprover_string_insert_long_func("__CPROVER_uninterpreted_string_insert_long_func"); -const irep_idt cprover_string_insert_bool_func("__CPROVER_uninterpreted_string_insert_bool_func"); -const irep_idt cprover_string_insert_char_func("__CPROVER_uninterpreted_string_insert_char_func"); -const irep_idt cprover_string_insert_float_func("__CPROVER_uninterpreted_string_insert_float_func"); -const irep_idt cprover_string_insert_double_func("__CPROVER_uninterpreted_string_insert_double_func"); -const irep_idt cprover_string_insert_char_array_func("__CPROVER_uninterpreted_string_insert_char_array_func"); -const irep_idt cprover_string_is_prefix_func("__CPROVER_uninterpreted_string_is_prefix_func"); -const irep_idt cprover_string_is_suffix_func("__CPROVER_uninterpreted_string_is_suffix_func"); -const irep_idt cprover_string_is_empty_func("__CPROVER_uninterpreted_string_is_empty_func"); -const irep_idt cprover_string_last_index_of_func("__CPROVER_uninterpreted_string_last_index_of_func"); -const irep_idt cprover_string_length_func("__CPROVER_uninterpreted_string_length_func"); -const irep_idt cprover_string_data_func("__CPROVER_uninterpreted_string_data_func"); -const irep_idt cprover_string_of_int_func("__CPROVER_uninterpreted_string_of_int_func"); -const irep_idt cprover_string_of_int_hex_func("__CPROVER_uninterpreted_string_of_int_hex_func"); -const irep_idt cprover_string_of_long_func("__CPROVER_uninterpreted_string_of_long_func"); -const irep_idt cprover_string_of_bool_func("__CPROVER_uninterpreted_string_of_bool_func"); -const irep_idt cprover_string_of_float_func("__CPROVER_uninterpreted_string_of_float_func"); -const irep_idt cprover_string_of_double_func("__CPROVER_uninterpreted_string_of_double_func"); -const irep_idt cprover_string_of_char_func("__CPROVER_uninterpreted_string_of_char_func"); -const irep_idt cprover_string_of_char_array_func("__CPROVER_uninterpreted_string_of_char_array_func"); -const irep_idt cprover_string_parse_int_func("__CPROVER_uninterpreted_string_parse_int_func"); -const irep_idt cprover_string_replace_func("__CPROVER_uninterpreted_string_replace_func"); -const irep_idt cprover_string_set_length_func("__CPROVER_uninterpreted_string_set_length_func"); -const irep_idt cprover_string_startswith_func("__CPROVER_uninterpreted_string_startswith_func"); -const irep_idt cprover_string_substring_func("__CPROVER_uninterpreted_string_substring_func"); -const irep_idt cprover_string_to_char_array_func("__CPROVER_uninterpreted_string_to_char_array_func"); -const irep_idt cprover_string_to_lower_case_func("__CPROVER_uninterpreted_string_to_lower_case_func"); -const irep_idt cprover_string_to_upper_case_func("__CPROVER_uninterpreted_string_to_upper_case_func"); -const irep_idt cprover_string_trim_func("__CPROVER_uninterpreted_string_trim_func"); -const irep_idt cprover_string_value_of_func("__CPROVER_uninterpreted_string_value_of_func"); - -#endif diff --git a/src/util/irep_ids.txt b/src/util/irep_ids.txt index ab78ba92528..a804b8266aa 100644 --- a/src/util/irep_ids.txt +++ b/src/util/irep_ids.txt @@ -735,3 +735,64 @@ high bswap string_constraint string_not_contains_constraint +cprover_char_literal_func +cprover_string_literal_func +cprover_string_char_at_func +cprover_string_char_set_func +cprover_string_code_point_at_func +cprover_string_code_point_before_func +cprover_string_code_point_count_func +cprover_string_offset_by_code_point_func +cprover_string_compare_to_func +cprover_string_concat_func +cprover_string_concat_int_func +cprover_string_concat_long_func +cprover_string_concat_char_func +cprover_string_concat_bool_func +cprover_string_concat_double_func +cprover_string_concat_float_func +cprover_string_concat_code_point_func +cprover_string_contains_func +cprover_string_copy_func +cprover_string_delete_func +cprover_string_delete_char_at_func +cprover_string_equal_func +cprover_string_equals_ignore_case_func +cprover_string_empty_string_func +cprover_string_endswith_func +cprover_string_format_func +cprover_string_hash_code_func +cprover_string_index_of_func +cprover_string_intern_func +cprover_string_insert_func +cprover_string_insert_int_func +cprover_string_insert_long_func +cprover_string_insert_bool_func +cprover_string_insert_char_func +cprover_string_insert_float_func +cprover_string_insert_double_func +cprover_string_insert_char_array_func +cprover_string_is_prefix_func +cprover_string_is_suffix_func +cprover_string_is_empty_func +cprover_string_last_index_of_func +cprover_string_length_func +cprover_string_data_func +cprover_string_of_int_func +cprover_string_of_int_hex_func +cprover_string_of_long_func +cprover_string_of_bool_func +cprover_string_of_float_func +cprover_string_of_double_func +cprover_string_of_char_func +cprover_string_of_char_array_func +cprover_string_parse_int_func +cprover_string_replace_func +cprover_string_set_length_func +cprover_string_startswith_func +cprover_string_substring_func +cprover_string_to_char_array_func +cprover_string_to_lower_case_func +cprover_string_to_upper_case_func +cprover_string_trim_func +cprover_string_value_of_func From 31b20a554f0c6e09917747a44e8a54e418e458f5 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Dec 2016 12:06:49 +0000 Subject: [PATCH 211/221] Replaced --pass option by --refine-string This makes the goal of this option clearer to the user. --- regression/strings/java_case/test.desc | 2 +- regression/strings/java_char_array/test.desc | 2 +- regression/strings/java_char_array_init/test.desc | 2 +- regression/strings/java_char_at/test.desc | 2 +- regression/strings/java_code_point/test.desc | 2 +- regression/strings/java_compare/test.desc | 2 +- regression/strings/java_concat/test.desc | 2 +- regression/strings/java_contains/test.desc | 2 +- regression/strings/java_delete/test.desc | 2 +- regression/strings/java_easychair/test.desc | 2 +- regression/strings/java_empty/test.desc | 2 +- regression/strings/java_equal/test.desc | 2 +- regression/strings/java_float/test.desc | 2 +- regression/strings/java_index_of/test.desc | 2 +- regression/strings/java_int/test.desc | 2 +- regression/strings/java_prefix/test.desc | 2 +- regression/strings/java_replace/test.desc | 2 +- regression/strings/java_set_length/test.desc | 2 +- regression/strings/java_string_builder/test.desc | 2 +- .../strings/java_string_builder_insert/test.desc | 2 +- .../strings/java_string_builder_length/test.desc | 2 +- regression/strings/java_strlen/test.desc | 2 +- regression/strings/java_substring/test.desc | 2 +- regression/strings/java_suffix/test.desc | 2 +- regression/strings/java_trim/test.desc | 2 +- regression/strings/test1/test.desc | 2 +- regression/strings/test2/test.desc | 2 +- regression/strings/test3.1/test.desc | 2 +- regression/strings/test3.2/test.desc | 2 +- regression/strings/test3.3/test.desc | 2 +- regression/strings/test3.4/test.desc | 2 +- regression/strings/test3/test.desc | 2 +- regression/strings/test4/test.desc | 2 +- regression/strings/test5/test.desc | 2 +- regression/strings/test_char_set/test.desc | 2 +- regression/strings/test_concat/test.desc | 2 +- regression/strings/test_contains/test.desc | 2 +- regression/strings/test_equal/test.desc | 2 +- regression/strings/test_index_of/test.desc | 2 +- regression/strings/test_int/test.desc | 2 +- regression/strings/test_pass1/test.desc | 2 +- regression/strings/test_pass_pc3/test.desc | 2 +- regression/strings/test_prefix/test.desc | 2 +- regression/strings/test_strlen/test.desc | 2 +- regression/strings/test_substring/test.desc | 2 +- regression/strings/test_suffix/test.desc | 2 +- src/cbmc/cbmc_parse_options.cpp | 10 +++++----- src/cbmc/cbmc_parse_options.h | 2 +- src/cbmc/cbmc_solvers.h | 2 +- 49 files changed, 53 insertions(+), 53 deletions(-) diff --git a/regression/strings/java_case/test.desc b/regression/strings/java_case/test.desc index 49ea16d56ff..782848fc4bc 100644 --- a/regression/strings/java_case/test.desc +++ b/regression/strings/java_case/test.desc @@ -1,6 +1,6 @@ CORE test_case.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_case.java line 11: SUCCESS$ diff --git a/regression/strings/java_char_array/test.desc b/regression/strings/java_char_array/test.desc index 59c8a082b1b..68467c16a5d 100644 --- a/regression/strings/java_char_array/test.desc +++ b/regression/strings/java_char_array/test.desc @@ -1,6 +1,6 @@ CORE test_char_array.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_char_array.java line 11: SUCCESS$ diff --git a/regression/strings/java_char_array_init/test.desc b/regression/strings/java_char_array_init/test.desc index 102b24ceb72..78583ae254a 100644 --- a/regression/strings/java_char_array_init/test.desc +++ b/regression/strings/java_char_array_init/test.desc @@ -1,6 +1,6 @@ CORE test_init.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_init.java line 16: SUCCESS$ diff --git a/regression/strings/java_char_at/test.desc b/regression/strings/java_char_at/test.desc index babcc395bcf..95f7f047240 100644 --- a/regression/strings/java_char_at/test.desc +++ b/regression/strings/java_char_at/test.desc @@ -1,6 +1,6 @@ CORE test_char_at.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_char_at.java line 11: SUCCESS$ diff --git a/regression/strings/java_code_point/test.desc b/regression/strings/java_code_point/test.desc index 1543a327fa4..75c871d3af3 100644 --- a/regression/strings/java_code_point/test.desc +++ b/regression/strings/java_code_point/test.desc @@ -1,6 +1,6 @@ CORE test_code_point.class ---pass +--string-refine ^EXIT=0$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_code_point.java line 5: SUCCESS$ diff --git a/regression/strings/java_compare/test.desc b/regression/strings/java_compare/test.desc index c500900a21e..98373d1cec6 100644 --- a/regression/strings/java_compare/test.desc +++ b/regression/strings/java_compare/test.desc @@ -1,6 +1,6 @@ CORE test_compare.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_compare.java line 6: SUCCESS$ diff --git a/regression/strings/java_concat/test.desc b/regression/strings/java_concat/test.desc index c6c0b193e5b..8dc65a8539d 100644 --- a/regression/strings/java_concat/test.desc +++ b/regression/strings/java_concat/test.desc @@ -1,6 +1,6 @@ CORE test_concat.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_concat.java line 9: SUCCESS$ diff --git a/regression/strings/java_contains/test.desc b/regression/strings/java_contains/test.desc index ade6b433bf1..4afb02b28ea 100644 --- a/regression/strings/java_contains/test.desc +++ b/regression/strings/java_contains/test.desc @@ -1,6 +1,6 @@ KNOWNBUG test_contains.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_contains.java line 7: SUCCESS$ diff --git a/regression/strings/java_delete/test.desc b/regression/strings/java_delete/test.desc index 377ada44770..4a61fbd4fdc 100644 --- a/regression/strings/java_delete/test.desc +++ b/regression/strings/java_delete/test.desc @@ -1,6 +1,6 @@ KNOWNBUG test_delete.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_delete.java line 11: SUCCESS$ diff --git a/regression/strings/java_easychair/test.desc b/regression/strings/java_easychair/test.desc index bd68fd1f60a..e47cb506ce7 100644 --- a/regression/strings/java_easychair/test.desc +++ b/regression/strings/java_easychair/test.desc @@ -1,6 +1,6 @@ KNOWNBUG easychair.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file easychair.java line 29: FAILURE$ diff --git a/regression/strings/java_empty/test.desc b/regression/strings/java_empty/test.desc index 56b21e2041c..44debdc3753 100644 --- a/regression/strings/java_empty/test.desc +++ b/regression/strings/java_empty/test.desc @@ -1,6 +1,6 @@ CORE test_empty.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_empty.java line 4: SUCCESS$ diff --git a/regression/strings/java_equal/test.desc b/regression/strings/java_equal/test.desc index 6375cfdc3d8..62f259bd750 100644 --- a/regression/strings/java_equal/test.desc +++ b/regression/strings/java_equal/test.desc @@ -1,6 +1,6 @@ CORE test_equal.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_equal.java line 7: FAILURE$ diff --git a/regression/strings/java_float/test.desc b/regression/strings/java_float/test.desc index 5edfd6eea22..dc77baa6a81 100644 --- a/regression/strings/java_float/test.desc +++ b/regression/strings/java_float/test.desc @@ -1,6 +1,6 @@ CORE test_float.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_float.java line 14: SUCCESS$ diff --git a/regression/strings/java_index_of/test.desc b/regression/strings/java_index_of/test.desc index dd5c60464d5..4d537ae191d 100644 --- a/regression/strings/java_index_of/test.desc +++ b/regression/strings/java_index_of/test.desc @@ -1,6 +1,6 @@ CORE test_index_of.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_index_of.java line 13: SUCCESS$ diff --git a/regression/strings/java_int/test.desc b/regression/strings/java_int/test.desc index 5211656c61b..afece95babd 100644 --- a/regression/strings/java_int/test.desc +++ b/regression/strings/java_int/test.desc @@ -1,6 +1,6 @@ CORE test_int.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_int.java line 8: SUCCESS$ diff --git a/regression/strings/java_prefix/test.desc b/regression/strings/java_prefix/test.desc index b234bba1788..a4f044bdcb0 100644 --- a/regression/strings/java_prefix/test.desc +++ b/regression/strings/java_prefix/test.desc @@ -1,6 +1,6 @@ CORE test_prefix.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_prefix.java line 14: SUCCESS$ diff --git a/regression/strings/java_replace/test.desc b/regression/strings/java_replace/test.desc index a5b15efd737..c3c0e2db362 100644 --- a/regression/strings/java_replace/test.desc +++ b/regression/strings/java_replace/test.desc @@ -1,6 +1,6 @@ CORE test_replace.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_replace.java line 6: SUCCESS$ diff --git a/regression/strings/java_set_length/test.desc b/regression/strings/java_set_length/test.desc index 66cf52835ac..6879ae6f470 100644 --- a/regression/strings/java_set_length/test.desc +++ b/regression/strings/java_set_length/test.desc @@ -1,6 +1,6 @@ CORE test_set_length.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_set_length.java line 8: SUCCESS$ diff --git a/regression/strings/java_string_builder/test.desc b/regression/strings/java_string_builder/test.desc index c0b3b6a51ce..de4bdc4c52a 100644 --- a/regression/strings/java_string_builder/test.desc +++ b/regression/strings/java_string_builder/test.desc @@ -1,6 +1,6 @@ CORE test_string_builder.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_string_builder.java line 11: SUCCESS$ diff --git a/regression/strings/java_string_builder_insert/test.desc b/regression/strings/java_string_builder_insert/test.desc index 72b86d46f27..54065573b19 100644 --- a/regression/strings/java_string_builder_insert/test.desc +++ b/regression/strings/java_string_builder_insert/test.desc @@ -1,6 +1,6 @@ CORE test_insert.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_insert.java line 17: SUCCESS$ diff --git a/regression/strings/java_string_builder_length/test.desc b/regression/strings/java_string_builder_length/test.desc index a15660ee85b..a9721e2b398 100644 --- a/regression/strings/java_string_builder_length/test.desc +++ b/regression/strings/java_string_builder_length/test.desc @@ -1,6 +1,6 @@ CORE test_sb_length.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ \[assertion.1\] assertion at file test_sb_length.java line 6: SUCCESS$ diff --git a/regression/strings/java_strlen/test.desc b/regression/strings/java_strlen/test.desc index 78007186493..ae3f7421ab5 100644 --- a/regression/strings/java_strlen/test.desc +++ b/regression/strings/java_strlen/test.desc @@ -1,6 +1,6 @@ CORE test_length.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_length.java line 10: SUCCESS$ diff --git a/regression/strings/java_substring/test.desc b/regression/strings/java_substring/test.desc index 78a9bcca9cb..b3fa34e1474 100644 --- a/regression/strings/java_substring/test.desc +++ b/regression/strings/java_substring/test.desc @@ -1,6 +1,6 @@ CORE test_substring.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_substring.java line 12: SUCCESS$ diff --git a/regression/strings/java_suffix/test.desc b/regression/strings/java_suffix/test.desc index f9472f03b47..6145a8258e1 100644 --- a/regression/strings/java_suffix/test.desc +++ b/regression/strings/java_suffix/test.desc @@ -1,6 +1,6 @@ CORE test_suffix.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_suffix.java line 12: SUCCESS$ diff --git a/regression/strings/java_trim/test.desc b/regression/strings/java_trim/test.desc index fa0e10a1ca7..5f540c5f2c0 100644 --- a/regression/strings/java_trim/test.desc +++ b/regression/strings/java_trim/test.desc @@ -1,6 +1,6 @@ CORE test_trim.class ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[assertion.1\] assertion at file test_trim.java line 5: SUCCESS$ diff --git a/regression/strings/test1/test.desc b/regression/strings/test1/test.desc index f622390356d..9522b31c347 100644 --- a/regression/strings/test1/test.desc +++ b/regression/strings/test1/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion c1 == c2: SUCCESS$ diff --git a/regression/strings/test2/test.desc b/regression/strings/test2/test.desc index d3054f813f1..e6d3d1d5130 100644 --- a/regression/strings/test2/test.desc +++ b/regression/strings/test2/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion n == 5: SUCCESS$ diff --git a/regression/strings/test3.1/test.desc b/regression/strings/test3.1/test.desc index 0f5bd6ccca7..d0214dfb10b 100644 --- a/regression/strings/test3.1/test.desc +++ b/regression/strings/test3.1/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.2/test.desc b/regression/strings/test3.2/test.desc index 0f5bd6ccca7..d0214dfb10b 100644 --- a/regression/strings/test3.2/test.desc +++ b/regression/strings/test3.2/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.3/test.desc b/regression/strings/test3.3/test.desc index 0f5bd6ccca7..d0214dfb10b 100644 --- a/regression/strings/test3.3/test.desc +++ b/regression/strings/test3.3/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test3.4/test.desc b/regression/strings/test3.4/test.desc index dbf3c40cfdb..ae761559453 100644 --- a/regression/strings/test3.4/test.desc +++ b/regression/strings/test3.4/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index 8d4c38f4fb0..fd08357b049 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length(s) == i + 5: SUCCESS$ diff --git a/regression/strings/test4/test.desc b/regression/strings/test4/test.desc index 0f5bd6ccca7..d0214dfb10b 100644 --- a/regression/strings/test4/test.desc +++ b/regression/strings/test4/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=0$ ^SIGNAL=0$ ^VERIFICATION SUCCESSFUL$ diff --git a/regression/strings/test5/test.desc b/regression/strings/test5/test.desc index dbf3c40cfdb..ae761559453 100644 --- a/regression/strings/test5/test.desc +++ b/regression/strings/test5/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^VERIFICATION FAILED$ diff --git a/regression/strings/test_char_set/test.desc b/regression/strings/test_char_set/test.desc index 0445499cd88..12ab1ce28bf 100644 --- a/regression/strings/test_char_set/test.desc +++ b/regression/strings/test_char_set/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_equal(t, __CPROVER_string_literal("apc")): SUCCESS$ diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 78baa04b9e9..7cb6694b218 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion c == 'p': SUCCESS$ diff --git a/regression/strings/test_contains/test.desc b/regression/strings/test_contains/test.desc index 8275425c548..cd8d4102e17 100644 --- a/regression/strings/test_contains/test.desc +++ b/regression/strings/test_contains/test.desc @@ -1,6 +1,6 @@ KNOWNBUG test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion !__CPROVER_uninterpreted_string_contains_func(t, __CPROVER_uninterpreted_string_literal_func(\"3\")): SUCCESS$ diff --git a/regression/strings/test_equal/test.desc b/regression/strings/test_equal/test.desc index 7e5b17c8994..86d583a12b0 100644 --- a/regression/strings/test_equal/test.desc +++ b/regression/strings/test_equal/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_equal(s, __CPROVER_string_literal("pippo")): SUCCESS$ diff --git a/regression/strings/test_index_of/test.desc b/regression/strings/test_index_of/test.desc index 6d9ddbc6281..7a8759cf7d1 100644 --- a/regression/strings/test_index_of/test.desc +++ b/regression/strings/test_index_of/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion firstSlash == 3: SUCCESS$ diff --git a/regression/strings/test_int/test.desc b/regression/strings/test_int/test.desc index 25a6a7ff59b..bdcc1519aa1 100644 --- a/regression/strings/test_int/test.desc +++ b/regression/strings/test_int/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_char_at(s,0) == .1.: SUCCESS$ diff --git a/regression/strings/test_pass1/test.desc b/regression/strings/test_pass1/test.desc index 7548b6e91ef..1779aeec664 100644 --- a/regression/strings/test_pass1/test.desc +++ b/regression/strings/test_pass1/test.desc @@ -1,6 +1,6 @@ KNOWNBUG test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_uninterpreted_string_equal_func(t, __CPROVER_uninterpreted_string_literal_func(\"a\")): SUCCESS diff --git a/regression/strings/test_pass_pc3/test.desc b/regression/strings/test_pass_pc3/test.desc index 8029eae3092..e5acffb2923 100644 --- a/regression/strings/test_pass_pc3/test.desc +++ b/regression/strings/test_pass_pc3/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length(s3) == 0: FAILURE$ diff --git a/regression/strings/test_prefix/test.desc b/regression/strings/test_prefix/test.desc index 187565433e4..4985862fefa 100644 --- a/regression/strings/test_prefix/test.desc +++ b/regression/strings/test_prefix/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion b: SUCCESS$ diff --git a/regression/strings/test_strlen/test.desc b/regression/strings/test_strlen/test.desc index a35e2499c9f..d56adaffe82 100644 --- a/regression/strings/test_strlen/test.desc +++ b/regression/strings/test_strlen/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion len_s == len_t: SUCCESS$ diff --git a/regression/strings/test_substring/test.desc b/regression/strings/test_substring/test.desc index 9a1df37c876..a10fee36c8f 100644 --- a/regression/strings/test_substring/test.desc +++ b/regression/strings/test_substring/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_equal(t,__CPROVER_string_literal("cd")): SUCCESS$ diff --git a/regression/strings/test_suffix/test.desc b/regression/strings/test_suffix/test.desc index 7c4823e9eb8..505d0071f8a 100644 --- a/regression/strings/test_suffix/test.desc +++ b/regression/strings/test_suffix/test.desc @@ -1,6 +1,6 @@ CORE test.c ---pass +--string-refine ^EXIT=10$ ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal("po"),s): SUCCESS$ diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 21f93d1593f..3e40c1ae403 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -340,9 +340,9 @@ void cbmc_parse_optionst::get_command_line_options(optionst &options) options.set_option("refine-arithmetic", true); } - if(cmdline.isset("pass")) + if(cmdline.isset("string-refine")) { - options.set_option("pass", true); + options.set_option("string-refine", true); } if(cmdline.isset("max-node-refinement")) @@ -920,9 +920,9 @@ bool cbmc_parse_optionst::process_goto_program( goto_partial_inline(goto_functions, ns, ui_message_handler); - if(cmdline.isset("pass")) + if(cmdline.isset("string-refine")) { - status() << "PASS Preprocessing " << eom; + status() << "Preprocessing for string refinement" << eom; pass_preprocesst(symbol_table, goto_functions, ui_message_handler); } @@ -1201,7 +1201,7 @@ void cbmc_parse_optionst::help() " --yices use Yices\n" " --z3 use Z3\n" " --refine use refinement procedure (experimental)\n" - " --pass use parameterized array for string solving (experimental)\n" + " --string-refine use string refinement (experimental)\n" " --outfile filename output formula to given file\n" " --arrays-uf-never never turn arrays into uninterpreted functions\n" " --arrays-uf-always always turn arrays into uninterpreted functions\n" diff --git a/src/cbmc/cbmc_parse_options.h b/src/cbmc/cbmc_parse_options.h index 59ff788b0a3..1a687a54c41 100644 --- a/src/cbmc/cbmc_parse_options.h +++ b/src/cbmc/cbmc_parse_options.h @@ -36,7 +36,7 @@ class optionst; "(no-sat-preprocessor)" \ "(no-pretty-names)(beautify)" \ "(fixedbv)" \ - "(dimacs)(refine)(max-node-refinement):(refine-arrays)(refine-arithmetic)(aig)(pass)" \ + "(dimacs)(refine)(max-node-refinement):(refine-arrays)(refine-arithmetic)(aig)(string-refine)" \ "(16)(32)(64)(LP64)(ILP64)(LLP64)(ILP32)(LP32)" \ "(little-endian)(big-endian)" \ "(show-goto-functions)(show-loops)" \ diff --git a/src/cbmc/cbmc_solvers.h b/src/cbmc/cbmc_solvers.h index 0096f140ffe..d4e60bbab4b 100644 --- a/src/cbmc/cbmc_solvers.h +++ b/src/cbmc/cbmc_solvers.h @@ -84,7 +84,7 @@ class cbmc_solverst:public messaget solver = get_dimacs(); else if(options.get_bool_option("refine")) solver = get_bv_refinement(); - else if(options.get_bool_option("pass")) + else if(options.get_bool_option("string-refine")) solver = get_string_refinement(); else if(options.get_bool_option("smt1")) solver = get_smt1(get_smt1_solver_type()); From 16e58dba22c4fe895ad6f99bdee6b708419837c1 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Dec 2016 12:22:27 +0000 Subject: [PATCH 212/221] Moved the pass* files to string_refine* and renamed classes string_refine will be more informative for whose not knowing the PASS method. The class pass_preprocess has also been renamed string_refine_preprocess. --- regression/strings/test3/test.desc | 2 +- regression/strings/test_concat/test.desc | 4 +-- src/cbmc/cbmc_parse_options.cpp | 4 +-- src/goto-programs/Makefile | 2 +- ...ocess.cpp => string_refine_preprocess.cpp} | 32 +++++++++---------- ...reprocess.h => string_refine_preprocess.h} | 10 +++--- 6 files changed, 27 insertions(+), 27 deletions(-) rename src/goto-programs/{pass_preprocess.cpp => string_refine_preprocess.cpp} (95%) rename src/goto-programs/{pass_preprocess.h => string_refine_preprocess.h} (93%) diff --git a/regression/strings/test3/test.desc b/regression/strings/test3/test.desc index fd08357b049..0df79c99ea1 100644 --- a/regression/strings/test3/test.desc +++ b/regression/strings/test3/test.desc @@ -5,6 +5,6 @@ test.c ^SIGNAL=0$ ^\[main.assertion.1\] assertion __CPROVER_string_length(s) == i + 5: SUCCESS$ ^\[main.assertion.2\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"po\"),s): SUCCESS$ -^\[main.assertion.3\] assertion __CPROVER_char_at(s, i) == 'p': SUCCESS$ +^\[main.assertion.3\] assertion __CPROVER_char_at(s, i) == .p.: SUCCESS$ ^\[main.assertion.4\] assertion __CPROVER_string_issuffix(__CPROVER_string_literal(\"p!o\"), s): FAILURE$ -- diff --git a/regression/strings/test_concat/test.desc b/regression/strings/test_concat/test.desc index 7cb6694b218..a7c68f62e25 100644 --- a/regression/strings/test_concat/test.desc +++ b/regression/strings/test_concat/test.desc @@ -3,6 +3,6 @@ test.c --string-refine ^EXIT=10$ ^SIGNAL=0$ -^\[main.assertion.1\] assertion c == 'p': SUCCESS$ -^\[main.assertion.2\] assertion __CPROVER_char_at(u,2) == 'p': FAILURE$ +^\[main.assertion.1\] assertion c == .p.: SUCCESS$ +^\[main.assertion.2\] assertion __CPROVER_char_at(u,2) == .p.: FAILURE$ -- diff --git a/src/cbmc/cbmc_parse_options.cpp b/src/cbmc/cbmc_parse_options.cpp index 3e40c1ae403..16f3d82f142 100644 --- a/src/cbmc/cbmc_parse_options.cpp +++ b/src/cbmc/cbmc_parse_options.cpp @@ -22,7 +22,7 @@ Author: Daniel Kroening, kroening@kroening.com #include #include -#include +#include #include #include #include @@ -923,7 +923,7 @@ bool cbmc_parse_optionst::process_goto_program( if(cmdline.isset("string-refine")) { status() << "Preprocessing for string refinement" << eom; - pass_preprocesst(symbol_table, goto_functions, ui_message_handler); + string_refine_preprocesst(symbol_table, goto_functions, ui_message_handler); } // remove returns, gcc vectors, complex diff --git a/src/goto-programs/Makefile b/src/goto-programs/Makefile index 3c7b524ac41..575bad87162 100644 --- a/src/goto-programs/Makefile +++ b/src/goto-programs/Makefile @@ -17,7 +17,7 @@ SRC = goto_convert.cpp goto_convert_function_call.cpp \ goto_trace.cpp xml_goto_trace.cpp vcd_goto_trace.cpp \ graphml_witness.cpp remove_virtual_functions.cpp \ class_hierarchy.cpp show_goto_functions.cpp get_goto_model.cpp \ - pass_preprocess.cpp + string_refine_preprocess.cpp INCLUDES= -I .. diff --git a/src/goto-programs/pass_preprocess.cpp b/src/goto-programs/string_refine_preprocess.cpp similarity index 95% rename from src/goto-programs/pass_preprocess.cpp rename to src/goto-programs/string_refine_preprocess.cpp index 67ac3b497cc..63981f70614 100644 --- a/src/goto-programs/pass_preprocess.cpp +++ b/src/goto-programs/string_refine_preprocess.cpp @@ -9,14 +9,14 @@ Date: September 2016 \*******************************************************************/ -#include "pass_preprocess.h" +#include "string_refine_preprocess.h" #include #include #include #include -symbol_exprt pass_preprocesst::new_tmp_symbol +symbol_exprt string_refine_preprocesst::new_tmp_symbol (const std::string &name, const typet &type) { auxiliary_symbolt tmp_symbol; @@ -29,7 +29,7 @@ symbol_exprt pass_preprocesst::new_tmp_symbol return symbol_exprt(name,type); } -void pass_preprocesst::declare_function(irep_idt function_name, const typet &type) +void string_refine_preprocesst::declare_function(irep_idt function_name, const typet &type) { auxiliary_symbolt func_symbol; func_symbol.base_name=function_name; @@ -41,7 +41,7 @@ void pass_preprocesst::declare_function(irep_idt function_name, const typet &typ goto_functions.function_map[function_name]; } -void pass_preprocesst::make_string_function +void string_refine_preprocesst::make_string_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -59,7 +59,7 @@ void pass_preprocesst::make_string_function i_it->code=assignment; } -void pass_preprocesst::make_string_function_call +void string_refine_preprocesst::make_string_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -77,7 +77,7 @@ void pass_preprocesst::make_string_function_call i_it->code=assignment; } -void pass_preprocesst::make_string_function_side_effect +void string_refine_preprocesst::make_string_function_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -99,20 +99,20 @@ void pass_preprocesst::make_string_function_side_effect i_it->code=assignment; } -void pass_preprocesst::make_to_char_array_function +void string_refine_preprocesst::make_to_char_array_function (goto_programt & goto_program, goto_programt::instructionst::iterator & i_it) { code_function_callt &function_call=to_code_function_call(i_it->code); if(function_call.lhs().type().id()!=ID_pointer) - debug() << "pass_preprocesst::make_to_char_array_function: " + debug() << "string_refine_preprocesst::make_to_char_array_function: " << "the function call should return a pointer" << eom; typet object_type = function_call.lhs().type().subtype(); exprt object_size = size_of_expr(object_type, ns); if(object_size.is_nil()) - debug() << "pass_preprocesst::make_to_char_array_function got nil object_size" << eom; + debug() << "string_refine_preprocesst::make_to_char_array_function got nil object_size" << eom; auto location = function_call.source_location(); std::vector new_code; @@ -185,7 +185,7 @@ void pass_preprocesst::make_to_char_array_function } -void pass_preprocesst::make_char_array_function +void string_refine_preprocesst::make_char_array_function (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -205,7 +205,7 @@ void pass_preprocesst::make_char_array_function make_string_function(i_it,function_name); } -void pass_preprocesst::make_char_array_function_call +void string_refine_preprocesst::make_char_array_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -224,7 +224,7 @@ void pass_preprocesst::make_char_array_function_call make_string_function_call(i_it,function_name); } -void pass_preprocesst::make_char_array_side_effect +void string_refine_preprocesst::make_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); @@ -244,7 +244,7 @@ void pass_preprocesst::make_char_array_side_effect } -void pass_preprocesst::replace_string_calls +void string_refine_preprocesst::replace_string_calls (goto_functionst::function_mapt::iterator f_it) { goto_programt &goto_program=f_it->second.body; @@ -313,7 +313,7 @@ void pass_preprocesst::replace_string_calls return; } -bool pass_preprocesst::has_java_string_type(const exprt &expr) +bool string_refine_preprocesst::has_java_string_type(const exprt &expr) { const typet type = expr.type(); if(type.id() == ID_pointer) { @@ -326,7 +326,7 @@ bool pass_preprocesst::has_java_string_type(const exprt &expr) } else return false; } -exprt pass_preprocesst::replace_string_literals(const exprt & expr) +exprt string_refine_preprocesst::replace_string_literals(const exprt & expr) { if(has_java_string_type(expr) ) { @@ -353,7 +353,7 @@ exprt pass_preprocesst::replace_string_literals(const exprt & expr) return expr; } -pass_preprocesst::pass_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, +string_refine_preprocesst::string_refine_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, message_handlert &_message_handler): messaget(_message_handler), symbol_table(_symbol_table), ns(_symbol_table), goto_functions(_goto_functions) diff --git a/src/goto-programs/pass_preprocess.h b/src/goto-programs/string_refine_preprocess.h similarity index 93% rename from src/goto-programs/pass_preprocess.h rename to src/goto-programs/string_refine_preprocess.h index 980990e83e5..b4a52751fae 100644 --- a/src/goto-programs/pass_preprocess.h +++ b/src/goto-programs/string_refine_preprocess.h @@ -9,13 +9,13 @@ Date: September 2016 \*******************************************************************/ -#ifndef CPROVER_PASS_PREPROCESS_H -#define CPROVER_PASS_PREPROCESS_H +#ifndef CPROVER_STRING_REFINE_PREPROCESS_H +#define CPROVER_STRING_REFINE_PREPROCESS_H #include #include -class pass_preprocesst:public messaget +class string_refine_preprocesst:public messaget { private: namespacet ns; @@ -31,7 +31,7 @@ class pass_preprocesst:public messaget std::map side_effect_char_array_functions; public: - pass_preprocesst(symbol_tablet &, goto_functionst &, message_handlert &); + string_refine_preprocesst(symbol_tablet &, goto_functionst &, message_handlert &); private: @@ -85,4 +85,4 @@ class pass_preprocesst:public messaget }; -#endif +#endif From d39d0142451c725dff0d4c50d9e8975e2607352d Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Dec 2016 12:34:50 +0000 Subject: [PATCH 213/221] Using from_expr from langapi/language_util.h We do that instead of redefining a similar function. --- src/solvers/refinement/string_refinement.cpp | 51 ++++++++------------ src/solvers/refinement/string_refinement.h | 3 -- 2 files changed, 20 insertions(+), 34 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 8176b432e35..5f81e8a1f2d 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -13,18 +13,7 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include #include - -// This is mostly for debugging: -#include -#include - -// Succinct version of pretty() -std::string string_refinementt::pretty_short(const exprt & expr) { - languagest languages(ns, new_ansi_c_language()); - std::string string_value; - languages.from_expr(expr, string_value); - return string_value; -} +#include string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): SUB(_ns, _prop) @@ -50,11 +39,11 @@ void string_refinementt::display_index_set() { for (std::map::iterator i = index_set.begin(), end = index_set.end(); i != end; ++i) { const exprt &s = i->first; - debug() << "IS(" << pretty_short(s) << ") == {"; + debug() << "IS(" << from_expr(s) << ") == {"; for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) - debug() << pretty_short (*j) << "; "; + debug() << from_expr(*j) << "; "; debug() << "}" << eom; } } @@ -68,11 +57,11 @@ void string_refinementt::add_instantiations() for (std::map::iterator i = current_index_set.begin(), end = current_index_set.end(); i != end; ++i) { const exprt &s = i->first; - debug() << "IS(" << pretty_short(s) << ") == {"; + debug() << "IS(" << from_expr(s) << ") == {"; for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); j != end; ++j) - debug() << pretty_short (*j) << "; "; + debug() << from_expr(*j) << "; "; debug() << "}" << eom; @@ -122,7 +111,7 @@ bvt string_refinementt::convert_symbol(const exprt &expr) bvt string_refinementt::convert_function_application(const function_application_exprt &expr) { - debug() << "string_refinementt::convert_function_application " << pretty_short(expr) << eom; + debug() << "string_refinementt::convert_function_application " << from_expr(expr) << eom; exprt f = generator.add_axioms_for_function_application(expr); return convert_bv(f); } @@ -143,8 +132,8 @@ bool string_refinementt::boolbv_set_equality_to_true(const equal_exprt &expr) //type==ns.follow(expr.rhs().type()) && type.id()!=ID_bool) { - debug() << "string_refinementt " << pretty_short(expr.lhs()) << " <- " - << pretty_short(expr.rhs()) << eom; + debug() << "string_refinementt " << from_expr(expr.lhs()) << " <- " + << from_expr(expr.rhs()) << eom; if(refined_string_typet::is_unrefined_string_type(type)) { @@ -286,7 +275,7 @@ void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) return; } - debug() << "adding lemma " << pretty_short(lemma) << eom; + debug() << "adding lemma " << from_expr(lemma) << eom; prop.l_set_to_true(convert(lemma)); if(add_to_index_set) @@ -361,7 +350,7 @@ exprt string_refinementt::get_array(const exprt &arr, const exprt &size) } else { debug() << "unable to get array-list value of " - << pretty_short(val) << eom; + << from_expr(val) << eom; return arr; } } @@ -389,21 +378,21 @@ bool string_refinementt::check_axioms() fmodel[elength] = len; fmodel[econtent] = arr; - debug() << it->first << " = " << pretty_short(it->second) - << " of length " << pretty_short(len) <<" := " << eom - << pretty_short(get(econtent)) << eom + debug() << it->first << " = " << from_expr(it->second) + << " of length " << from_expr(len) <<" := " << eom + << from_expr(get(econtent)) << eom << string_of_array(econtent,len) << eom; } for(std::vector::iterator it = generator.boolean_symbols.begin(); it != generator.boolean_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + debug() << "" << it->get_identifier() << " := " << from_expr(get(*it)) << eom; fmodel[*it] = get(*it); } for(std::vector::iterator it = generator.index_symbols.begin(); it != generator.index_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << pretty_short(get(*it)) << eom; + debug() << "" << it->get_identifier() << " := " << from_expr(get(*it)) << eom; fmodel[*it] = get(*it); } @@ -417,7 +406,7 @@ bool string_refinementt::check_axioms() exprt negaxiom = and_exprt(axiom.premise(), not_exprt(axiom.body())); replace_expr(fmodel, negaxiom); - debug() << "negaxiom: " << pretty_short(negaxiom) << eom; + debug() << "negaxiom: " << from_expr(negaxiom) << eom; satcheck_no_simplifiert sat_check; SUB solver(ns, sat_check); @@ -695,8 +684,8 @@ void string_refinementt::update_index_set(const exprt &formula) assert(s.type().id() == ID_array); const exprt &simplified = simplify_sum(i); if(index_set[s].insert(simplified).second) { - debug() << "adding to index set of " << pretty_short(s) - << ": " << pretty_short(simplified) << eom; + debug() << "adding to index set of " << from_expr(s) + << ": " << from_expr(simplified) << eom; current_index_set[s].insert(simplified); } } else { @@ -761,14 +750,14 @@ void string_refinementt::instantiate_not_contains(const string_not_contains_cons exprt s0 = axiom.s0(); exprt s1 = axiom.s1(); - debug() << "instantiate not contains " << pretty_short(s0) << " : " << pretty_short(s1) << eom; + debug() << "instantiate not contains " << from_expr(s0) << " : " << from_expr(s1) << eom; expr_sett index_set0 = index_set[to_string_expr(s0).content()]; expr_sett index_set1 = index_set[to_string_expr(s1).content()]; for(expr_sett::iterator it0 = index_set0.begin(); it0 != index_set0.end(); it0++) for(expr_sett::iterator it1 = index_set1.begin(); it1 != index_set1.end(); it1++) { - debug() << pretty_short(*it0) << " : " << pretty_short(*it1) << eom; + debug() << from_expr(*it0) << " : " << from_expr(*it1) << eom; exprt val = minus_exprt(*it0, *it1); exprt witness = generator.get_witness_of(axiom,val); and_exprt prem_and_is_witness(axiom.premise(), diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 6f4c2afc7c5..031f98ceb50 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -146,9 +146,6 @@ class string_refinementt: public bv_refinementt // Convert the content of a string to a more readable representation std::string string_of_array(const exprt &arr, const exprt &size); - // succinct and pretty way to display an expression - std::string pretty_short(const exprt & expr); - void print_time(std::string s); }; From 6b73f41722992d4d0f33c38c7f1944bf2a48a119 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Dec 2016 12:43:16 +0000 Subject: [PATCH 214/221] Use arith-tools.h functions to convert expressions to integer --- src/solvers/refinement/string_refinement.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 5f81e8a1f2d..9d4b01709b2 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -282,15 +282,17 @@ void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) cur.push_back(lemma); } -unsigned integer_of_expr(const constant_exprt & expr) +unsigned unsigned_of_expr(const constant_exprt & expr) { - return integer2unsigned(string2integer(as_string(expr.get_value()),2)); + mp_integer i; + assert(!to_integer(expr,i)); + return integer2unsigned(i); } std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) { if(size.id() != ID_constant) return "string of unknown size"; - unsigned n = integer_of_expr(to_constant_expr(size)); + unsigned n = unsigned_of_expr(to_constant_expr(size)); if(n>500) return "very long string"; if(n==0) return "\"\""; unsigned str[n]; @@ -298,10 +300,10 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s if(val.id() == "array-list") { for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; - unsigned idx = integer_of_expr(to_constant_expr(index)); + unsigned idx = unsigned_of_expr(to_constant_expr(index)); if(idx < n){ exprt value = val.operands()[i*2+1]; - str[idx] = integer_of_expr(to_constant_expr(value)); + str[idx] = unsigned_of_expr(to_constant_expr(value)); } } } else { From 2ab3e49e3a552a59eab3c1b54e104f3d49161f93 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 15 Dec 2016 13:49:23 +0000 Subject: [PATCH 215/221] Made integer_of_expr to correctly deal with negative numbers --- src/solvers/refinement/string_refinement.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 9d4b01709b2..700c5562016 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -282,17 +282,21 @@ void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) cur.push_back(lemma); } -unsigned unsigned_of_expr(const constant_exprt & expr) +int integer_of_expr(const constant_exprt & expr) { mp_integer i; assert(!to_integer(expr,i)); - return integer2unsigned(i); + if(i<0) + return -integer2unsigned(-i); + else + return integer2unsigned(i); } std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) { if(size.id() != ID_constant) return "string of unknown size"; - unsigned n = unsigned_of_expr(to_constant_expr(size)); + int n = integer_of_expr(to_constant_expr(size)); + if(n<0) return "string of wrong size"; if(n>500) return "very long string"; if(n==0) return "\"\""; unsigned str[n]; @@ -300,10 +304,11 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s if(val.id() == "array-list") { for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; - unsigned idx = unsigned_of_expr(to_constant_expr(index)); - if(idx < n){ + int idx = integer_of_expr(to_constant_expr(index)); + if(idx Date: Thu, 15 Dec 2016 14:14:44 +0000 Subject: [PATCH 216/221] Setting the default of integer_of_expr to 0 This function is only used for getting some strings from the current valuation given by the string solver, so if the value is not a valid constant, we can replace it by 0 to get one possible valuation. --- src/solvers/refinement/string_refinement.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 700c5562016..165629f282d 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -282,12 +282,13 @@ void string_refinementt::add_lemma(const exprt &lemma, bool add_to_index_set) cur.push_back(lemma); } -int integer_of_expr(const constant_exprt & expr) +unsigned integer_of_expr(const constant_exprt & expr) { mp_integer i; - assert(!to_integer(expr,i)); + if(to_integer(expr,i)) + return 0; if(i<0) - return -integer2unsigned(-i); + return 0; else return integer2unsigned(i); } @@ -295,8 +296,7 @@ int integer_of_expr(const constant_exprt & expr) std::string string_refinementt::string_of_array(const exprt &arr, const exprt &size) { if(size.id() != ID_constant) return "string of unknown size"; - int n = integer_of_expr(to_constant_expr(size)); - if(n<0) return "string of wrong size"; + unsigned n=integer_of_expr(to_constant_expr(size)); if(n>500) return "very long string"; if(n==0) return "\"\""; unsigned str[n]; @@ -304,7 +304,7 @@ std::string string_refinementt::string_of_array(const exprt &arr, const exprt &s if(val.id() == "array-list") { for (size_t i = 0; i < val.operands().size()/2; i++) { exprt index = val.operands()[i*2]; - int idx = integer_of_expr(to_constant_expr(index)); + unsigned idx = integer_of_expr(to_constant_expr(index)); if(idx Date: Fri, 16 Dec 2016 13:10:43 +0000 Subject: [PATCH 217/221] Cleaner version of extract_java_string --- src/solvers/refinement/string_constraint_generator.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 8bfd77afaf7..7b903a6aeb4 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -269,7 +269,9 @@ exprt string_constraint_generatort::add_axioms_for_function_application irep_idt extract_java_string(const symbol_exprt & s) { std::string tmp(s.get(ID_identifier).c_str()); - std::string value = tmp.substr(31); + std::string prefix("java::java.lang.String.Literal."); + assert(has_prefix(tmp,prefix)); + std::string value = tmp.substr(prefix.length()); return irep_idt(value); } From 582547d77d21f0b9b3de23e1e8a85d0ca138c8ab Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Dec 2016 13:48:45 +0000 Subject: [PATCH 218/221] Removed changes to remove_returns used for debuging --- src/goto-programs/remove_returns.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/goto-programs/remove_returns.cpp b/src/goto-programs/remove_returns.cpp index 11d2c234011..ce1ced18c37 100644 --- a/src/goto-programs/remove_returns.cpp +++ b/src/goto-programs/remove_returns.cpp @@ -73,14 +73,6 @@ void remove_returnst::replace_returns( symbol_tablet::symbolst::iterator s_it= symbol_table.symbols.find(function_id); - if(s_it==symbol_table.symbols.end()) - { - std::string str = "function symbol for "; - str += function_id.c_str(); - str += " not found"; - throw str; - } - assert(s_it!=symbol_table.symbols.end()); symbolt &function_symbol=s_it->second; From d6d4627ff9990d6199ab3b4726c18ceb0bec3ad9 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Fri, 16 Dec 2016 14:58:04 +0000 Subject: [PATCH 219/221] Following coding guidelines in string preprocessing I run the cpplint script on the string solver file, and improved the coding style according to its suggestions. I also added more explenations in string_constraint_generator. ALl the errors signaled by cpplint have been dealt with except a few that conserns indentation in the comments and one concerning an array of non-constant size. --- .../string_refine_preprocess.cpp | 765 ++++-- src/goto-programs/string_refine_preprocess.h | 16 +- .../refinement/refined_string_type.cpp | 77 +- src/solvers/refinement/refined_string_type.h | 49 +- src/solvers/refinement/string_constraint.h | 96 +- .../string_constraint_generator.cpp | 2290 ++++++++++------- .../refinement/string_constraint_generator.h | 144 +- src/solvers/refinement/string_expr.cpp | 7 +- src/solvers/refinement/string_expr.h | 50 +- src/solvers/refinement/string_refinement.cpp | 920 ++++--- src/solvers/refinement/string_refinement.h | 65 +- 11 files changed, 2574 insertions(+), 1905 deletions(-) diff --git a/src/goto-programs/string_refine_preprocess.cpp b/src/goto-programs/string_refine_preprocess.cpp index 63981f70614..73fd6e622b7 100644 --- a/src/goto-programs/string_refine_preprocess.cpp +++ b/src/goto-programs/string_refine_preprocess.cpp @@ -14,6 +14,7 @@ Date: September 2016 #include #include #include +#include #include symbol_exprt string_refine_preprocesst::new_tmp_symbol @@ -26,10 +27,11 @@ symbol_exprt string_refine_preprocesst::new_tmp_symbol tmp_symbol.name=name; tmp_symbol.type=type; symbol_table.add(tmp_symbol); - return symbol_exprt(name,type); + return symbol_exprt(name, type); } -void string_refine_preprocesst::declare_function(irep_idt function_name, const typet &type) +void string_refine_preprocesst::declare_function +(irep_idt function_name, const typet &type) { auxiliary_symbolt func_symbol; func_symbol.base_name=function_name; @@ -46,13 +48,14 @@ void string_refine_preprocesst::make_string_function { code_function_callt &function_call=to_code_function_call(i_it->code); code_typet function_type=to_code_type(function_call.function().type()); - declare_function(function_name,function_type); + declare_function(function_name, function_type); function_application_exprt rhs; rhs.type()=function_type.return_type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(unsigned i = 0; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + for(std::size_t i=0; imake_assignment(); @@ -64,13 +67,14 @@ void string_refine_preprocesst::make_string_function_call { code_function_callt &function_call=to_code_function_call(i_it->code); code_typet function_type=to_code_type(function_call.function().type()); - declare_function(function_name,function_type); + declare_function(function_name, function_type); function_application_exprt rhs; rhs.type()=function_call.arguments()[0].type(); rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(unsigned i = 1; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + for(std::size_t i=1; imake_assignment(); @@ -82,14 +86,15 @@ void string_refine_preprocesst::make_string_function_side_effect { code_function_callt &function_call=to_code_function_call(i_it->code); code_typet function_type=to_code_type(function_call.function().type()); - declare_function(function_name,function_type); + declare_function(function_name, function_type); function_application_exprt rhs; typet return_type = function_call.arguments()[0].type(); rhs.type()=return_type; rhs.add_source_location()=function_call.source_location(); rhs.function()=symbol_exprt(function_name); - for(unsigned i = 0; i < function_call.arguments().size(); i++) - rhs.arguments().push_back(replace_string_literals(function_call.arguments()[i])); + for(std::size_t i=0; icode); if(function_call.lhs().type().id()!=ID_pointer) debug() << "string_refine_preprocesst::make_to_char_array_function: " - << "the function call should return a pointer" << eom; + << "the function call should return a pointer" << eom; - typet object_type = function_call.lhs().type().subtype(); - exprt object_size = size_of_expr(object_type, ns); + typet object_type=function_call.lhs().type().subtype(); + exprt object_size=size_of_expr(object_type, ns); if(object_size.is_nil()) - debug() << "string_refine_preprocesst::make_to_char_array_function got nil object_size" << eom; + debug() << "string_refine_preprocesst::make_to_char_array_function" + << "got nil object_size" << eom; auto location = function_call.source_location(); std::vector new_code; @@ -122,17 +127,19 @@ void string_refine_preprocesst::make_to_char_array_function malloc_expr.type()=pointer_typet(object_type); malloc_expr.add_source_location()=location; - assert(function_call.arguments().size() >= 1); + assert(function_call.arguments().size()>=1); exprt string_argument = replace_string_literals(function_call.arguments()[0]); typet string_argument_type = string_argument.type(); // tmp_assign = MALLOC(struct java::array[reference],sizeof(s)) - symbol_exprt tmp_assign = new_tmp_symbol("tmp_assign", pointer_typet(object_type)); + symbol_exprt tmp_assign = + new_tmp_symbol("tmp_assign", pointer_typet(object_type)); + code_assignt assign_malloc(tmp_assign, malloc_expr); new_code.push_back(assign_malloc); // tmp_assign->length = (int)__CPROVER_uninterpreted_string_length_func(s); - declare_function(ID_cprover_string_length_func,unsignedbv_typet(32)); + declare_function(ID_cprover_string_length_func, unsignedbv_typet(32)); function_application_exprt call_to_length; call_to_length.type()=unsignedbv_typet(32); @@ -142,22 +149,25 @@ void string_refine_preprocesst::make_to_char_array_function const struct_typet &struct_type=to_struct_type(ns.follow(object_type)); dereference_exprt deref(tmp_assign, object_type); - member_exprt length(deref,struct_type.components()[1].get_name(), - struct_type.components()[1].type()); - code_assignt assign_length(length,typecast_exprt(call_to_length,signedbv_typet(32))); + member_exprt length(deref, struct_type.components()[1].get_name(), + struct_type.components()[1].type()); + typecast_exprt rhs_length(call_to_length, signedbv_typet(32)); + code_assignt assign_length(length, rhs_length); new_code.push_back(assign_length); // tmp_assign->data = new data.type[length]; assert(ns.follow(object_type).id()==ID_struct); - member_exprt data(deref,struct_type.components()[2].get_name(), - struct_type.components()[2].type()); + member_exprt data(deref, struct_type.components()[2].get_name(), + struct_type.components()[2].type()); side_effect_exprt data_cpp_new_expr(ID_cpp_new_array, data.type()); data_cpp_new_expr.set(ID_size, length); - symbol_exprt tmp_data = new_tmp_symbol("tmp_data", struct_type.components()[2].type()); + symbol_exprt tmp_data= + new_tmp_symbol("tmp_data", struct_type.components()[2].type()); + new_code.push_back(code_assignt(data, data_cpp_new_expr)); - // tmp_assign->data = __ID_CPROVER_uninterpreted_string_data_func(s,tmp_assing->data); - declare_function(ID_cprover_string_data_func,void_typet()); + // tmp_assign->data = string_data_func(s,tmp_assing->data); + declare_function(ID_cprover_string_data_func, void_typet()); function_application_exprt call_to_data; call_to_data.type()=void_typet(); call_to_data.add_source_location()=location; @@ -167,21 +177,21 @@ void string_refine_preprocesst::make_to_char_array_function call_to_data.arguments().push_back(dereference_exprt(data)); exprt tmp_nil = new_tmp_symbol("tmp_nil", void_typet()); - new_code.push_back(code_assignt(tmp_nil,call_to_data)); + new_code.push_back(code_assignt(tmp_nil, call_to_data)); // return_tmp0 = tmp_assign new_code.push_back(code_assignt(function_call.lhs(), tmp_assign)); // putting the assignements into the program - for(int i=0; imake_assignment(); - i_it->code=new_code[i]; - i_it->source_location=location; - if(imake_assignment(); + i_it->code=new_code[i]; + i_it->source_location=location; + if(i::iterator it = function_call.arguments().begin(); - *it = array_size; - function_call.arguments().insert(++it,data); - make_string_function(i_it,function_name); + *it=array_size; + function_call.arguments().insert(++it, data); + make_string_function(i_it, function_name); } void string_refine_preprocesst::make_char_array_function_call @@ -212,35 +222,36 @@ void string_refine_preprocesst::make_char_array_function_call exprt arg = function_call.arguments()[1]; auto location = function_call.source_location(); typet object_type = arg.type().subtype(); - exprt array_size = member_exprt(dereference_exprt(arg,object_type) - ,"length",signedbv_typet(32)); - exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", - pointer_typet(pointer_typet(unsignedbv_typet(16)))); - exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); - - std::vector::iterator it = function_call.arguments().begin(); - *(++it) = array_size; - function_call.arguments().insert(++it,data); - make_string_function_call(i_it,function_name); + dereference_exprt deref(arg, object_type); + exprt array_size = member_exprt(deref, "length", signedbv_typet(32)); + pointer_typet data_type(unsignedbv_typet(16)); + exprt data_pointer = member_exprt(deref, "data", pointer_typet(data_type)); + exprt data = dereference_exprt(data_pointer, data_type); + + std::vector::iterator it=function_call.arguments().begin(); + *(++it)=array_size; + function_call.arguments().insert(++it, data); + make_string_function_call(i_it, function_name); } void string_refine_preprocesst::make_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name) { code_function_callt &function_call=to_code_function_call(i_it->code); - exprt arg = function_call.arguments()[2]; - auto location = function_call.source_location(); - typet object_type = arg.type().subtype(); - exprt array_size = member_exprt(dereference_exprt(arg,object_type) - ,"length",signedbv_typet(32)); - exprt data_pointer = member_exprt(dereference_exprt(arg,object_type),"data", - pointer_typet(pointer_typet(unsignedbv_typet(16)))); - exprt data = dereference_exprt(data_pointer, pointer_typet(unsignedbv_typet(16))); - - std::vector::iterator it = std::next(std::next(function_call.arguments().begin())); - *it = array_size; - function_call.arguments().insert(++it,data); - make_string_function_side_effect(i_it,function_name); + exprt arg=function_call.arguments()[2]; + auto location=function_call.source_location(); + typet object_type=arg.type().subtype(); + dereference_exprt deref(arg, object_type); + exprt array_size=member_exprt(deref, "length", signedbv_typet(32)); + pointer_typet data_type(unsignedbv_typet(16)); + exprt data_pointer=member_exprt(deref, "data", pointer_typet(data_type)); + exprt data=dereference_exprt(data_pointer, data_type); + + std::vector::iterator it= + std::next(std::next(function_call.arguments().begin())); + *it=array_size; + function_call.arguments().insert(++it, data); + make_string_function_side_effect(i_it, function_name); } @@ -250,219 +261,447 @@ void string_refine_preprocesst::replace_string_calls goto_programt &goto_program=f_it->second.body; Forall_goto_program_instructions(i_it, goto_program) + { + if(i_it->is_function_call()) + { + code_function_callt &function_call=to_code_function_call(i_it->code); + for(std::size_t i=0; isecond; + } + + if(function_call.function().id()==ID_symbol) + { + const irep_idt function_id= + to_symbol_expr(function_call.function()).get_identifier(); + + auto it=string_functions.find(function_id); + if(it!=string_functions.end()) + make_string_function(i_it, it->second); + + it=side_effect_functions.find(function_id); + if(it!=side_effect_functions.end()) + make_string_function_side_effect(i_it, it->second); + + it=string_function_calls.find(function_id); + if(it!=string_function_calls.end()) + make_string_function_call(i_it, it->second); + + it=string_of_char_array_functions.find(function_id); + if(it!=string_of_char_array_functions.end()) + make_char_array_function(i_it, it->second); + + it=string_of_char_array_function_calls.find(function_id); + if(it!=string_of_char_array_function_calls.end()) + make_char_array_function_call(i_it, it->second); + + it=side_effect_char_array_functions.find(function_id); + if(it!=side_effect_char_array_functions.end()) + make_char_array_side_effect(i_it, it->second); + + if(function_id==irep_idt("java::java.lang.String.toCharArray:()[C")) + make_to_char_array_function(goto_program, i_it); + } + } + else { - if(i_it->is_function_call()) - { - - code_function_callt &function_call=to_code_function_call(i_it->code); - for(unsigned i = 0; i < function_call.arguments().size(); i++) - if(string_builders.find(function_call.arguments()[i]) != string_builders.end()) - function_call.arguments()[i]= string_builders[function_call.arguments()[i]]; - - if(function_call.function().id()==ID_symbol) - { - const irep_idt function_id= - to_symbol_expr(function_call.function()).get_identifier(); - - if(string_functions.find(function_id) != string_functions.end()) - make_string_function(i_it,string_functions[function_id]); - else if(side_effect_functions.find(function_id) != side_effect_functions.end()) - make_string_function_side_effect(i_it,side_effect_functions[function_id]); - else if(string_function_calls.find(function_id) != string_function_calls.end()) - make_string_function_call(i_it, string_function_calls[function_id]); - else if(string_of_char_array_functions.find(function_id) != string_of_char_array_functions.end()) - make_char_array_function(i_it,string_of_char_array_functions[function_id]); - else if(string_of_char_array_function_calls.find(function_id) != string_of_char_array_function_calls.end()) - make_char_array_function_call(i_it,string_of_char_array_function_calls[function_id]); - else if(side_effect_char_array_functions.find(function_id) != side_effect_char_array_functions.end()) - make_char_array_side_effect(i_it,side_effect_char_array_functions[function_id]); - else if(function_id == irep_idt("java::java.lang.String.toCharArray:()[C")) - make_to_char_array_function(goto_program,i_it); - } - } - else - { - if(i_it->is_assign()) - { - - code_assignt assignment = to_code_assign(i_it->code); - exprt new_rhs = replace_string_literals(assignment.rhs()); - code_assignt new_assignment(assignment.lhs(),new_rhs); - - if(new_rhs.id()==ID_function_application) - { - function_application_exprt f=to_function_application_expr(new_rhs); - const exprt &name=f.function(); - assert(name.id()==ID_symbol); - const irep_idt &id=to_symbol_expr(name).get_identifier(); - auto it=c_string_functions.find(id); - if(it!=c_string_functions.end()) - { - declare_function(it->second, f.type()); - f.function()=symbol_exprt(it->second); - new_assignment=code_assignt(assignment.lhs(),f); - } - } - - new_assignment.add_source_location()=assignment.source_location(); - i_it->make_assignment(); - i_it->code=new_assignment; - } - } + if(i_it->is_assign()) + { + code_assignt assignment=to_code_assign(i_it->code); + exprt new_rhs=replace_string_literals(assignment.rhs()); + code_assignt new_assignment(assignment.lhs(), new_rhs); + + if(new_rhs.id()==ID_function_application) + { + function_application_exprt f=to_function_application_expr(new_rhs); + const exprt &name=f.function(); + assert(name.id()==ID_symbol); + const irep_idt &id=to_symbol_expr(name).get_identifier(); + auto it=c_string_functions.find(id); + if(it!=c_string_functions.end()) + { + declare_function(it->second, f.type()); + f.function()=symbol_exprt(it->second); + new_assignment=code_assignt(assignment.lhs(), f); + } + } + + new_assignment.add_source_location()=assignment.source_location(); + i_it->make_assignment(); + i_it->code=new_assignment; + } } + } return; } bool string_refine_preprocesst::has_java_string_type(const exprt &expr) { - const typet type = expr.type(); - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - if(subtype.id() == ID_symbol) { - irep_idt tag = to_symbol_type(subtype).get_identifier(); - return (tag == irep_idt("java::java.lang.String")); - } else return false; - } else return false; + const typet type=expr.type(); + if(type.id()==ID_pointer) + { + pointer_typet pt=to_pointer_type(type); + typet subtype=pt.subtype(); + if(subtype.id()==ID_symbol) + { + irep_idt tag=to_symbol_type(subtype).get_identifier(); + return (tag==irep_idt("java::java.lang.String")); + } + else + return false; + } + else + return false; } exprt string_refine_preprocesst::replace_string_literals(const exprt & expr) { if(has_java_string_type(expr) ) + { + if(expr.operands().size()==1 && expr.op0().id()==ID_symbol) { - if(expr.operands().size() == 1 && expr.op0().id() ==ID_symbol) - { - std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); - if(id.substr(0,31) == "java::java.lang.String.Literal.") - { - function_application_exprt rhs; - rhs.type()=expr.type(); - rhs.add_source_location()=expr.source_location(); - rhs.function()=symbol_exprt(ID_cprover_string_literal_func); - goto_functions.function_map[ID_cprover_string_literal_func]; - rhs.arguments().push_back(address_of_exprt(expr.op0())); - auxiliary_symbolt tmp_symbol; - tmp_symbol.is_static_lifetime=false; - tmp_symbol.mode=ID_java; - tmp_symbol.name=ID_cprover_string_literal_func; - symbol_table.add(tmp_symbol); - return rhs; - } - } + std::string id(to_symbol_expr(expr.op0()).get_identifier().c_str()); + if(has_prefix(id, "java::java.lang.String.Literal.")) + { + function_application_exprt rhs; + rhs.type()=expr.type(); + rhs.add_source_location()=expr.source_location(); + rhs.function()=symbol_exprt(ID_cprover_string_literal_func); + goto_functions.function_map[ID_cprover_string_literal_func]; + rhs.arguments().push_back(address_of_exprt(expr.op0())); + auxiliary_symbolt tmp_symbol; + tmp_symbol.is_static_lifetime=false; + tmp_symbol.mode=ID_java; + tmp_symbol.name=ID_cprover_string_literal_func; + symbol_table.add(tmp_symbol); + return rhs; + } } + } return expr; } -string_refine_preprocesst::string_refine_preprocesst (symbol_tablet & _symbol_table, goto_functionst & _goto_functions, - message_handlert &_message_handler): - messaget(_message_handler), symbol_table(_symbol_table), ns(_symbol_table), - goto_functions(_goto_functions) - { - - // initialiasing the function maps - string_functions[irep_idt("java::java.lang.String.codePointAt:(I)I")] = ID_cprover_string_code_point_at_func; - string_functions[irep_idt("java::java.lang.String.codePointBefore:(I)I")] = ID_cprover_string_code_point_before_func; - string_functions[irep_idt("java::java.lang.String.codePointCount:(II)I")] = ID_cprover_string_code_point_count_func; - string_functions[irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")] = ID_cprover_string_offset_by_code_point_func; - string_functions[irep_idt("java::java.lang.String.hashCode:()I")] = ID_cprover_string_hash_code_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(I)I")] = ID_cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(II)I")] = ID_cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;)I")] = ID_cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;I)I")] = ID_cprover_string_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(I)I")]=ID_cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(II)I")]=ID_cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]=ID_cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]=ID_cprover_string_last_index_of_func; - string_functions[irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)Ljava/lang/String;")] = ID_cprover_string_concat_func; - string_functions[irep_idt("java::java.lang.String.length:()I")] = ID_cprover_string_length_func; - string_functions[irep_idt("java::java.lang.StringBuilder.length:()I")] = ID_cprover_string_length_func; - string_functions[irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")] = ID_cprover_string_equal_func; - string_functions[irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")] = ID_cprover_string_equals_ignore_case_func; - string_functions[irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")] = ID_cprover_string_startswith_func; - string_functions[irep_idt ("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z")] = ID_cprover_string_startswith_func; - string_functions[irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")] = ID_cprover_string_endswith_func; - string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;")] = ID_cprover_string_substring_func; - string_functions[irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")] = ID_cprover_string_trim_func; - string_functions[irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")] = ID_cprover_string_to_lower_case_func; - string_functions[irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")] = ID_cprover_string_to_upper_case_func; - string_functions[irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")] = ID_cprover_string_replace_func; - string_functions[irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")] = ID_cprover_string_contains_func; - string_functions[irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")] = ID_cprover_string_compare_to_func; - string_functions[irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")] = ID_cprover_string_intern_func; - string_functions[irep_idt("java::java.lang.String.isEmpty:()Z")] = ID_cprover_string_is_empty_func; - string_functions[irep_idt("java::java.lang.String.charAt:(I)C")] = ID_cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.StringBuilder.charAt:(I)C")] = ID_cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.CharSequence.charAt:(I)C")] = ID_cprover_string_char_at_func; - string_functions[irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")] = ID_cprover_string_copy_func; - - string_functions[irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")] = ID_cprover_string_of_float_func; - string_functions[irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")] = ID_cprover_string_of_float_func; - string_functions[irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_func; - string_functions[irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")] = ID_cprover_string_of_int_hex_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")] = ID_cprover_string_of_long_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")] = ID_cprover_string_of_double_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")] = ID_cprover_string_of_bool_func; - string_functions[irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")] = ID_cprover_string_of_char_func; - string_functions[irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")] = ID_cprover_string_parse_int_func; - - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")] = ID_cprover_string_char_set_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_int_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(J)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_long_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(Z)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_bool_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(C)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_char_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_double_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.append:(F)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_float_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.appendCodePoint:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_concat_code_point_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.delete:(II)Ljava/lang/StringBuilder;")] = ID_cprover_string_delete_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.deleteCharAt:(I)Ljava/lang/StringBuilder;")] = ID_cprover_string_delete_char_at_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(II)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_int_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IJ)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_long_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IC)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.insert:(IZ)Ljava/lang/StringBuilder;") ] = ID_cprover_string_insert_bool_func; - side_effect_functions[irep_idt("java::java.lang.StringBuilder.setLength:(I)V")] = ID_cprover_string_set_length_func; - - - side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[CII)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_array_func; - side_effect_char_array_functions[irep_idt("java::java.lang.StringBuilder.insert:(I[C)Ljava/lang/StringBuilder;")] = ID_cprover_string_insert_char_array_func; - - string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")] = ID_cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")] = ID_cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")] = ID_cprover_string_copy_func; - string_function_calls[irep_idt("java::java.lang.String.:()V")] = ID_cprover_string_empty_string_func; - string_function_calls[irep_idt("java::java.lang.StringBuilder.:()V")] = ID_cprover_string_empty_string_func; - - string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([C)V")] = ID_cprover_string_of_char_array_func; - string_of_char_array_function_calls[irep_idt("java::java.lang.String.:([CII)V")] = ID_cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; - string_of_char_array_functions[irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")] = ID_cprover_string_of_char_array_func; - - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_literal_func")]=ID_cprover_string_literal_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_char_at_func")]=ID_cprover_string_char_at_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_equal_func")]=ID_cprover_string_equal_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_concat_func")]=ID_cprover_string_concat_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_length_func")]=ID_cprover_string_length_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_substring_func")]=ID_cprover_string_substring_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_is_prefix_func")]=ID_cprover_string_is_prefix_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_is_suffix_func")]=ID_cprover_string_is_suffix_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_contains_func")]=ID_cprover_string_contains_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_index_of_func")]=ID_cprover_string_index_of_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_last_index_of_func")]=ID_cprover_string_last_index_of_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_char_set_func")]=ID_cprover_string_char_set_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_copy_func")]=ID_cprover_string_copy_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_parse_int_func")]=ID_cprover_string_parse_int_func; - c_string_functions[irep_idt("__CPROVER_uninterpreted_string_of_int_func")]=ID_cprover_string_of_int_func; +string_refine_preprocesst::string_refine_preprocesst( + symbol_tablet & _symbol_table, + goto_functionst & _goto_functions, + message_handlert &_message_handler) + :messaget(_message_handler), + symbol_table(_symbol_table), + ns(_symbol_table), + goto_functions(_goto_functions) +{ + // initialiasing the function maps + string_functions + [irep_idt("java::java.lang.String.codePointAt:(I)I")]= + ID_cprover_string_code_point_at_func; + string_functions + [irep_idt("java::java.lang.String.codePointBefore:(I)I")]= + ID_cprover_string_code_point_before_func; + string_functions + [irep_idt("java::java.lang.String.codePointCount:(II)I")]= + ID_cprover_string_code_point_count_func; + string_functions + [irep_idt("java::java.lang.String.offsetByCodePoints:(II)I")]= + ID_cprover_string_offset_by_code_point_func; + string_functions + [irep_idt("java::java.lang.String.hashCode:()I")]= + ID_cprover_string_hash_code_func; + string_functions + [irep_idt("java::java.lang.String.indexOf:(I)I")]= + ID_cprover_string_index_of_func; + string_functions + [irep_idt("java::java.lang.String.indexOf:(II)I")]= + ID_cprover_string_index_of_func; + string_functions + [irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;)I")]= + ID_cprover_string_index_of_func; + string_functions + [irep_idt("java::java.lang.String.indexOf:(Ljava/lang/String;I)I")]= + ID_cprover_string_index_of_func; + string_functions + [irep_idt("java::java.lang.String.lastIndexOf:(I)I")]= + ID_cprover_string_last_index_of_func; + string_functions + [irep_idt("java::java.lang.String.lastIndexOf:(II)I")]= + ID_cprover_string_last_index_of_func; + string_functions + [irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;)I")]= + ID_cprover_string_last_index_of_func; + string_functions + [irep_idt("java::java.lang.String.lastIndexOf:(Ljava/lang/String;I)I")]= + ID_cprover_string_last_index_of_func; + string_functions + [irep_idt("java::java.lang.String.concat:(Ljava/lang/String;)" + "Ljava/lang/String;")]=ID_cprover_string_concat_func; + string_functions + [irep_idt("java::java.lang.String.length:()I")]= + ID_cprover_string_length_func; + string_functions + [irep_idt("java::java.lang.StringBuilder.length:()I")]= + ID_cprover_string_length_func; + string_functions + [irep_idt("java::java.lang.String.equals:(Ljava/lang/Object;)Z")]= + ID_cprover_string_equal_func; + string_functions + [irep_idt("java::java.lang.String.equalsIgnoreCase:(Ljava/lang/String;)Z")]= + ID_cprover_string_equals_ignore_case_func; + string_functions + [irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;)Z")]= + ID_cprover_string_startswith_func; + string_functions + [irep_idt("java::java.lang.String.startsWith:(Ljava/lang/String;I)Z")]= + ID_cprover_string_startswith_func; + string_functions + [irep_idt("java::java.lang.String.endsWith:(Ljava/lang/String;)Z")]= + ID_cprover_string_endswith_func; + string_functions + [irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")]= + ID_cprover_string_substring_func; + string_functions + [irep_idt("java::java.lang.String.substring:(II)Ljava/lang/String;")]= + ID_cprover_string_substring_func; + string_functions + [irep_idt("java::java.lang.String.substring:(I)Ljava/lang/String;")]= + ID_cprover_string_substring_func; + string_functions + [irep_idt("java::java.lang.StringBuilder.substring:(II)Ljava/lang/String;") + ]=ID_cprover_string_substring_func; + string_functions + [irep_idt("java::java.lang.StringBuilder.substring:(I)Ljava/lang/String;")]= + ID_cprover_string_substring_func; + string_functions + [irep_idt + ("java::java.lang.String.subSequence:(II)Ljava/lang/CharSequence;")]= + ID_cprover_string_substring_func; + string_functions + [irep_idt("java::java.lang.String.trim:()Ljava/lang/String;")]= + ID_cprover_string_trim_func; + string_functions + [irep_idt("java::java.lang.String.toLowerCase:()Ljava/lang/String;")]= + ID_cprover_string_to_lower_case_func; + string_functions + [irep_idt("java::java.lang.String.toUpperCase:()Ljava/lang/String;")]= + ID_cprover_string_to_upper_case_func; + string_functions + [irep_idt("java::java.lang.String.replace:(CC)Ljava/lang/String;")]= + ID_cprover_string_replace_func; + string_functions + [irep_idt("java::java.lang.String.contains:(Ljava/lang/CharSequence;)Z")]= + ID_cprover_string_contains_func; + string_functions + [irep_idt("java::java.lang.String.compareTo:(Ljava/lang/String;)I")]= + ID_cprover_string_compare_to_func; + string_functions + [irep_idt("java::java.lang.String.intern:()Ljava/lang/String;")]= + ID_cprover_string_intern_func; + string_functions + [irep_idt("java::java.lang.String.isEmpty:()Z")]= + ID_cprover_string_is_empty_func; + string_functions + [irep_idt("java::java.lang.String.charAt:(I)C")]= + ID_cprover_string_char_at_func; + string_functions + [irep_idt("java::java.lang.StringBuilder.charAt:(I)C")]= + ID_cprover_string_char_at_func; + string_functions + [irep_idt("java::java.lang.CharSequence.charAt:(I)C")]= + ID_cprover_string_char_at_func; + string_functions + [irep_idt("java::java.lang.StringBuilder.toString:()Ljava/lang/String;")]= + ID_cprover_string_copy_func; + + string_functions + [irep_idt("java::java.lang.String.valueOf:(F)Ljava/lang/String;")]= + ID_cprover_string_of_float_func; + string_functions + [irep_idt("java::java.lang.Float.toString:(F)Ljava/lang/String;")]= + ID_cprover_string_of_float_func; + string_functions + [irep_idt("java::java.lang.Integer.toString:(I)Ljava/lang/String;")]= + ID_cprover_string_of_int_func; + string_functions + [irep_idt("java::java.lang.String.valueOf:(I)Ljava/lang/String;")]= + ID_cprover_string_of_int_func; + string_functions + [irep_idt("java::java.lang.Integer.toHexString:(I)Ljava/lang/String;")]= + ID_cprover_string_of_int_hex_func; + string_functions + [irep_idt("java::java.lang.String.valueOf:(L)Ljava/lang/String;")]= + ID_cprover_string_of_long_func; + string_functions + [irep_idt("java::java.lang.String.valueOf:(D)Ljava/lang/String;")]= + ID_cprover_string_of_double_func; + string_functions + [irep_idt("java::java.lang.String.valueOf:(Z)Ljava/lang/String;")]= + ID_cprover_string_of_bool_func; + string_functions + [irep_idt("java::java.lang.String.valueOf:(C)Ljava/lang/String;")]= + ID_cprover_string_of_char_func; + string_functions + [irep_idt("java::java.lang.Integer.parseInt:(Ljava/lang/String;)I")]= + ID_cprover_string_parse_int_func; + + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(Ljava/lang/String;)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.setCharAt:(IC)V")]= + ID_cprover_string_char_set_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(I)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_int_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(J)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_long_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(Z)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_bool_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(C)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_char_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(D)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_double_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.append:(F)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_float_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.appendCodePoint:(I)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_concat_code_point_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.delete:(II)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_delete_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.deleteCharAt:(I)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_delete_char_at_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.insert:(ILjava/lang/String;)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.insert:(II)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_int_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.insert:(IJ)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_long_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.insert:(IC)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_char_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.insert:(IZ)" + "Ljava/lang/StringBuilder;") ]= + ID_cprover_string_insert_bool_func; + side_effect_functions + [irep_idt("java::java.lang.StringBuilder.setLength:(I)V")]= + ID_cprover_string_set_length_func; + + + side_effect_char_array_functions + [irep_idt("java::java.lang.StringBuilder.insert:(I[CII)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_char_array_func; + side_effect_char_array_functions + [irep_idt("java::java.lang.StringBuilder.insert:(I[C)" + "Ljava/lang/StringBuilder;")]= + ID_cprover_string_insert_char_array_func; + + string_function_calls + [irep_idt("java::java.lang.String.:(Ljava/lang/String;)V")]= + ID_cprover_string_copy_func; + string_function_calls + [irep_idt("java::java.lang.String.:(Ljava/lang/StringBuilder;)V")]= + ID_cprover_string_copy_func; + string_function_calls + [irep_idt("java::java.lang.StringBuilder.:(Ljava/lang/String;)V")]= + ID_cprover_string_copy_func; + string_function_calls + [irep_idt("java::java.lang.String.:()V")]= + ID_cprover_string_empty_string_func; + string_function_calls + [irep_idt("java::java.lang.StringBuilder.:()V")]= + ID_cprover_string_empty_string_func; + + string_of_char_array_function_calls + [irep_idt("java::java.lang.String.:([C)V")]= + ID_cprover_string_of_char_array_func; + string_of_char_array_function_calls + [irep_idt("java::java.lang.String.:([CII)V")]= + ID_cprover_string_of_char_array_func; + string_of_char_array_functions + [irep_idt("java::java.lang.String.valueOf:([CII)Ljava/lang/String;")]= + ID_cprover_string_of_char_array_func; + string_of_char_array_functions + [irep_idt("java::java.lang.String.valueOf:([C)Ljava/lang/String;")]= + ID_cprover_string_of_char_array_func; + string_of_char_array_functions + [irep_idt("java::java.lang.String.copyValueOf:([CII)Ljava/lang/String;")]= + ID_cprover_string_of_char_array_func; + string_of_char_array_functions + [irep_idt("java::java.lang.String.copyValueOf:([C)Ljava/lang/String;")]= + ID_cprover_string_of_char_array_func; + + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_literal_func")]= + ID_cprover_string_literal_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_char_at_func")]= + ID_cprover_string_char_at_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_equal_func")]= + ID_cprover_string_equal_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_concat_func")]= + ID_cprover_string_concat_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_length_func")]= + ID_cprover_string_length_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_substring_func")]= + ID_cprover_string_substring_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_is_prefix_func")]= + ID_cprover_string_is_prefix_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_is_suffix_func")]= + ID_cprover_string_is_suffix_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_contains_func")]= + ID_cprover_string_contains_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_index_of_func")]= + ID_cprover_string_index_of_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_last_index_of_func")]= + ID_cprover_string_last_index_of_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_char_set_func")]= + ID_cprover_string_char_set_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_copy_func")]= + ID_cprover_string_copy_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_parse_int_func")]= + ID_cprover_string_parse_int_func; + c_string_functions + [irep_idt("__CPROVER_uninterpreted_string_of_int_func")]= + ID_cprover_string_of_int_func; Forall_goto_functions(it, goto_functions) replace_string_calls(it); - } +} diff --git a/src/goto-programs/string_refine_preprocess.h b/src/goto-programs/string_refine_preprocess.h index b4a52751fae..cea83582c9e 100644 --- a/src/goto-programs/string_refine_preprocess.h +++ b/src/goto-programs/string_refine_preprocess.h @@ -9,8 +9,8 @@ Date: September 2016 \*******************************************************************/ -#ifndef CPROVER_STRING_REFINE_PREPROCESS_H -#define CPROVER_STRING_REFINE_PREPROCESS_H +#ifndef CPROVER_GOTO_PROGRAMS_STRING_REFINE_PREPROCESS_H +#define CPROVER_GOTO_PROGRAMS_STRING_REFINE_PREPROCESS_H #include #include @@ -31,16 +31,16 @@ class string_refine_preprocesst:public messaget std::map side_effect_char_array_functions; public: - string_refine_preprocesst(symbol_tablet &, goto_functionst &, message_handlert &); + string_refine_preprocesst + (symbol_tablet &, goto_functionst &, message_handlert &); private: - // add a temporary symbol to the symbol table symbol_exprt new_tmp_symbol(const std::string &name, const typet &type); void declare_function(irep_idt function_name, const typet &type); - exprt replace_string_literals(const exprt & ); + exprt replace_string_literals(const exprt &); // replace "lhs=s.some_function(x,...)" by "lhs=function_name(s,x,...)" void make_string_function @@ -74,7 +74,8 @@ class string_refine_preprocesst:public messaget void make_char_array_function_call (goto_programt::instructionst::iterator & i_it, irep_idt function_name); - // replace "r = s.some_function(i,arr,...)" by "s=function_name(s,i,arr.length,arr.data)" + // replace `r = s.some_function(i,arr,...)` by + // `s=function_name(s,i,arr.length,arr.data)` // and add a correspondance from r to s in the string_builders map void make_char_array_side_effect (goto_programt::instructionst::iterator & i_it, irep_idt function_name); @@ -82,7 +83,6 @@ class string_refine_preprocesst:public messaget bool has_java_string_type(const exprt &expr); void replace_string_calls(goto_functionst::function_mapt::iterator f_it); - }; -#endif +#endif diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp index d590cd91737..cd10c95fbf6 100644 --- a/src/solvers/refinement/refined_string_type.cpp +++ b/src/solvers/refinement/refined_string_type.cpp @@ -10,13 +10,16 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include -refined_string_typet::refined_string_typet(unsignedbv_typet char_type) : struct_typet() { +refined_string_typet::refined_string_typet(unsignedbv_typet char_type) + :struct_typet() +{ components().resize(2); components()[0].set_name("length"); components()[0].set_pretty_name("length"); components()[0].type()=refined_string_typet::index_type(); - array_typet char_array(char_type,infinity_exprt(refined_string_typet::index_type())); + infinity_exprt infinite_index(refined_string_typet::index_type()); + array_typet char_array(char_type, infinite_index); components()[1].set_name("content"); components()[1].set_pretty_name("content"); components()[1].type()=char_array; @@ -24,58 +27,66 @@ refined_string_typet::refined_string_typet(unsignedbv_typet char_type) : struct_ bool refined_string_typet::is_c_string_type(const typet &type) { - if (type.id() == ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return (tag == irep_idt("__CPROVER_string")); - } else return false; + if(type.id()==ID_struct) + { + irep_idt tag=to_struct_type(type).get_tag(); + return (tag==irep_idt("__CPROVER_string")); + } + return false; } bool refined_string_typet::is_java_string_type(const typet &type) { - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); + if(type.id()==ID_pointer) + { + pointer_typet pt=to_pointer_type(type); + typet subtype=pt.subtype(); return is_java_deref_string_type(subtype); - } else return false; + } + return false; } bool refined_string_typet::is_java_deref_string_type(const typet &type) { - if(type.id() == ID_symbol) + if(type.id()==ID_symbol) { - irep_idt tag = to_symbol_type(type).get_identifier(); - return (tag == irep_idt("java::java.lang.String")); + irep_idt tag=to_symbol_type(type).get_identifier(); + return (tag==irep_idt("java::java.lang.String")); } - else if(type.id() == ID_struct) + else if(type.id()==ID_struct) { - irep_idt tag = to_struct_type(type).get_tag(); - return (tag == irep_idt("java.lang.String")); + irep_idt tag=to_struct_type(type).get_tag(); + return (tag==irep_idt("java.lang.String")); } - else return false; + return false; } bool refined_string_typet::is_java_string_builder_type(const typet &type) { - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - if(subtype.id() == ID_struct) { - irep_idt tag = to_struct_type(subtype).get_tag(); - return (tag == irep_idt("java.lang.StringBuilder")); + if(type.id()==ID_pointer) + { + pointer_typet pt=to_pointer_type(type); + typet subtype=pt.subtype(); + if(subtype.id()==ID_struct) + { + irep_idt tag=to_struct_type(subtype).get_tag(); + return (tag==irep_idt("java.lang.StringBuilder")); } - else return false; - } else return false; + } + return false; } bool refined_string_typet::is_java_char_sequence_type(const typet &type) { - if(type.id() == ID_pointer) { - pointer_typet pt = to_pointer_type(type); - typet subtype = pt.subtype(); - if(subtype.id() == ID_struct) { - irep_idt tag = to_struct_type(subtype).get_tag(); - return (tag == irep_idt("java.lang.CharSequence")); + if(type.id()==ID_pointer) + { + pointer_typet pt=to_pointer_type(type); + typet subtype=pt.subtype(); + if(subtype.id()==ID_struct) + { + irep_idt tag=to_struct_type(subtype).get_tag(); + return (tag==irep_idt("java.lang.CharSequence")); } - else return false; - } else return false; + } + return false; } diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index 2e3c1c99756..de1ff1d7b46 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -7,8 +7,8 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ -#ifndef CPROVER_SOLVER_REFINED_STRING_TYPE_H -#define CPROVER_SOLVER_REFINED_STRING_TYPE_H +#ifndef CPROVER_SOLVERS_REFINEMENT_REFINED_STRING_TYPE_H +#define CPROVER_SOLVERS_REFINEMENT_REFINED_STRING_TYPE_H #include #include @@ -19,22 +19,30 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #define STRING_SOLVER_JAVA_CHAR_WIDTH 16 // Internal type used for string refinement -class refined_string_typet : public struct_typet { +class refined_string_typet: public struct_typet +{ public: - refined_string_typet(unsignedbv_typet char_type); + explicit refined_string_typet(unsignedbv_typet char_type); // Type for the content (list of characters) of a string inline array_typet get_content_type() { return to_array_type((to_struct_type(*this)).components()[1].type());} // Types used in this refinement - static inline unsignedbv_typet char_type() { return unsignedbv_typet(STRING_SOLVER_C_CHAR_WIDTH);} + static inline unsignedbv_typet char_type() + { return unsignedbv_typet(STRING_SOLVER_C_CHAR_WIDTH); } - static inline unsignedbv_typet java_char_type() { return unsignedbv_typet(STRING_SOLVER_JAVA_CHAR_WIDTH);} + static inline unsignedbv_typet java_char_type() + { return unsignedbv_typet(STRING_SOLVER_JAVA_CHAR_WIDTH);} - static inline signedbv_typet index_type() { return signedbv_typet(STRING_SOLVER_INDEX_WIDTH);} + static inline signedbv_typet index_type() + { return signedbv_typet(STRING_SOLVER_INDEX_WIDTH);} - static inline exprt index_zero() { return constant_exprt(integer2binary(0, STRING_SOLVER_INDEX_WIDTH), index_type());} + static inline exprt index_zero() + { + return constant_exprt(integer2binary(0, STRING_SOLVER_INDEX_WIDTH), + index_type()); + } // For C the unrefined string type is __CPROVER_string, for java it is a // pointer to a strict with tag java.lang.String @@ -49,24 +57,27 @@ class refined_string_typet : public struct_typet { static bool is_java_char_sequence_type(const typet & type); - static inline unsignedbv_typet get_char_type(const exprt & expr) { - if(is_c_string_type(expr.type())) return char_type(); - else return java_char_type(); + static inline unsignedbv_typet get_char_type(const exprt & expr) + { + if(is_c_string_type(expr.type())) + return char_type(); + else + return java_char_type(); } static inline bool is_unrefined_string_type(const typet & type) - { return (is_c_string_type(type) - || is_java_string_type(type) - || is_java_string_builder_type(type) - || is_java_char_sequence_type(type) - ); } + { + return (is_c_string_type(type) + || is_java_string_type(type) + || is_java_string_builder_type(type) + || is_java_char_sequence_type(type)); + } static inline bool is_unrefined_string(const exprt & expr) - { return (is_unrefined_string_type(expr.type())); } + { return (is_unrefined_string_type(expr.type())); } static inline constant_exprt index_of_int(int i) - { return from_integer(i,index_type()); } - + { return from_integer(i, index_type()); } }; diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 72ef7ccb1df..631f7b94891 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -1,23 +1,22 @@ /** -*- C++ -*- *****************************************************\ Module: String constraints - (see the PASS paper at HVC'13 + (see the PASS paper at HVC'13 Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ -#ifndef CPROVER_SOLVER_STRING_CONSTRAINT_H -#define CPROVER_SOLVER_STRING_CONSTRAINT_H +#ifndef CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_H +#define CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_H #include #include #include -class string_constraintt : public exprt +class string_constraintt: public exprt { public: - // String constraints are of the form // forall univ_var in [0,bound[. premise => body // or premise => body @@ -46,65 +45,57 @@ class string_constraintt : public exprt { return operands()[4]; } - + // Trivial constraint string_constraintt() : exprt(ID_string_constraint) { - assert(false); //string constraints should not be initialized directly - copy_to_operands(true_exprt(),true_exprt()); + assert(false); // string constraints should not be initialized directly + copy_to_operands(true_exprt(), true_exprt()); } - // // Constraint with no quantification, and no premise - // string_constraintt(const exprt & body) : exprt(ID_string_constraint) - // { - // copy_to_operands(true_exprt(),body); - // } - - // Constraint with no quantification: prem => bod - // string_constraintt(const exprt & prem, const exprt & body) - // : exprt(ID_string_constraint) - // { - // copy_to_operands(prem,body); - // } - // Returns a new constraints with an universal quantifier added - string_constraintt(const symbol_exprt &univ, const exprt &bound_inf, const exprt &bound_sup, const exprt &prem, const exprt &body) + string_constraintt( + const symbol_exprt &univ, + const exprt &bound_inf, + const exprt &bound_sup, + const exprt &prem, + const exprt &body) : exprt(ID_string_constraint) { - copy_to_operands(prem,body); + copy_to_operands(prem, body); copy_to_operands(univ, bound_sup, bound_inf); }; - + // Default bound inferior is 0 - string_constraintt(const symbol_exprt &univ, const exprt &bound_sup, const exprt &prem, const exprt &body) - : string_constraintt(univ, refined_string_typet::index_zero(), bound_sup, prem, body) + string_constraintt( + const symbol_exprt &univ, + const exprt &bound_sup, + const exprt &prem, + const exprt &body) + : string_constraintt(univ, refined_string_typet::index_zero(), + bound_sup, prem, body) {}; // Default premise is true - string_constraintt(const symbol_exprt &univ, const exprt &bound_sup, const exprt &body) - : string_constraintt(univ, refined_string_typet::index_zero(), bound_sup, true_exprt(), body) + string_constraintt + (const symbol_exprt &univ, const exprt &bound_sup, const exprt &body) + : string_constraintt + (univ, refined_string_typet::index_zero(), bound_sup, true_exprt(), body) {}; - // Bound a variable that is existentially quantified - //string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_inf, const exprt & bound_sup); - - // Default bound inferior is 0 - //string_constraintt with_exists(const symbol_exprt & exist, const exprt & bound_sup); + bool is_simple() const { return (operands().size()==2); } + bool is_univ_quant() const { return (operands().size()==5); } + bool is_not_contains() const { return false; } - bool is_simple() const { return (operands().size() == 2); }; - bool is_univ_quant() const { return (operands().size() == 5); }; - bool is_not_contains() const { return false; }; - inline symbol_exprt get_univ_var() const { return to_symbol_expr(univ_var()); } - + inline exprt univ_within_bounds() const { return and_exprt (binary_relation_exprt(lower_bound(), ID_le, get_univ_var()), binary_relation_exprt(upper_bound(), ID_gt, get_univ_var())); } - }; extern inline const string_constraintt &to_string_constraint(const exprt &expr) @@ -119,16 +110,20 @@ extern inline string_constraintt &to_string_constraint(exprt &expr) return static_cast(expr); } -class string_not_contains_constraintt : public exprt +class string_not_contains_constraintt: public exprt { public: - // string_contains_constraintt are formula of the form: + // string_not contains_constraintt are formula of the form: // forall x in [lb,ub[. p(x) => exists y in [lb,ub[. s1[x+y] != s2[y] - - string_not_contains_constraintt - (exprt univ_lower_bound, exprt univ_bound_sup, exprt premise, - exprt exists_bound_inf, exprt exists_bound_sup, exprt s0, exprt s1) + string_not_contains_constraintt( + exprt univ_lower_bound, + exprt univ_bound_sup, + exprt premise, + exprt exists_bound_inf, + exprt exists_bound_sup, + exprt s0, + exprt s1) :exprt(ID_string_not_contains_constraint) { copy_to_operands(univ_lower_bound, univ_bound_sup, premise); @@ -136,13 +131,13 @@ class string_not_contains_constraintt : public exprt copy_to_operands(s1); }; - bool is_not_contains() const { return true; }; + bool is_not_contains() const { return true; } inline const exprt &univ_lower_bound() const { return operands()[0]; } - + inline const exprt &univ_upper_bound() const { return operands()[1]; @@ -167,19 +162,18 @@ class string_not_contains_constraintt : public exprt { return operands()[5]; } - + inline const exprt &s1() const { return operands()[6]; } - }; extern inline const string_not_contains_constraintt &to_string_not_contains_constraint(const exprt &expr) { assert(expr.id()==ID_string_not_contains_constraint - && expr.operands().size()==7); + && expr.operands().size()==7); return static_cast(expr); } @@ -187,7 +181,7 @@ extern inline string_not_contains_constraintt &to_string_not_contains_constraint(exprt &expr) { assert(expr.id()==ID_string_not_contains_constraint - && expr.operands().size()==7); + && expr.operands().size()==7); return static_cast(expr); } diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index 7b903a6aeb4..b5f3dd6a08f 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -20,10 +20,11 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com constant_exprt string_constraint_generatort::constant_char(int i) const { if(mode==ID_C) - return from_integer(i,refined_string_typet::char_type()); + return from_integer(i, refined_string_typet::char_type()); else if(mode==ID_java) - return from_integer(i,refined_string_typet::java_char_type()); - else assert(false); // only C and java modes supported + return from_integer(i, refined_string_typet::java_char_type()); + else + assert(false); // only C and java modes supported } unsignedbv_typet string_constraint_generatort::get_char_type() const @@ -32,7 +33,8 @@ unsignedbv_typet string_constraint_generatort::get_char_type() const return refined_string_typet::char_type(); else if(mode==ID_java) return refined_string_typet::java_char_type(); - else assert(false); // only C and java modes supported + else + assert(false); // only C and java modes supported } size_t string_constraint_generatort::get_char_width() const @@ -41,88 +43,101 @@ size_t string_constraint_generatort::get_char_width() const return STRING_SOLVER_C_CHAR_WIDTH; else if(mode==ID_java) return STRING_SOLVER_JAVA_CHAR_WIDTH; - else assert(false); // only C and java modes supported + else + assert(false); // only C and java modes supported } -symbol_exprt string_constraint_generatort::fresh_univ_index(const irep_idt &prefix) +symbol_exprt string_constraint_generatort::fresh_univ_index +(const irep_idt &prefix) { - return string_exprt::fresh_symbol(prefix,refined_string_typet::index_type()); + return string_exprt::fresh_symbol(prefix, refined_string_typet::index_type()); } -symbol_exprt string_constraint_generatort::fresh_exist_index(const irep_idt &prefix) +symbol_exprt string_constraint_generatort::fresh_exist_index +(const irep_idt &prefix) { - symbol_exprt s = string_exprt::fresh_symbol(prefix,refined_string_typet::index_type()); + symbol_exprt s=string_exprt::fresh_symbol + (prefix, refined_string_typet::index_type()); index_symbols.push_back(s); return s; } -symbol_exprt string_constraint_generatort::fresh_boolean(const irep_idt &prefix) +symbol_exprt string_constraint_generatort::fresh_boolean +(const irep_idt &prefix) { - symbol_exprt b = string_exprt::fresh_symbol(prefix,bool_typet()); + symbol_exprt b=string_exprt::fresh_symbol(prefix, bool_typet()); boolean_symbols.push_back(b); return b; } -string_exprt string_constraint_generatort::add_axioms_for_string_expr(const exprt & unrefined_string) +string_exprt string_constraint_generatort::add_axioms_for_string_expr +(const exprt & unrefined_string) { string_exprt s; - if(unrefined_string.id() == ID_function_application) - { - exprt res = add_axioms_for_function_application(to_function_application_expr(unrefined_string)); - assert(res.type() == refined_string_typet(get_char_type())); - s = to_string_expr(res); - } + if(unrefined_string.id()==ID_function_application) + { + exprt res=add_axioms_for_function_application + (to_function_application_expr(unrefined_string)); + assert(res.type()==refined_string_typet(get_char_type())); + s=to_string_expr(res); + } else if(unrefined_string.id()==ID_symbol) - s = find_or_add_string_of_symbol(to_symbol_expr(unrefined_string)); + s=find_or_add_string_of_symbol(to_symbol_expr(unrefined_string)); else if(unrefined_string.id()==ID_address_of) - { - assert(unrefined_string.op0().id()==ID_symbol); - s = find_or_add_string_of_symbol(to_symbol_expr(unrefined_string.op0())); - } + { + assert(unrefined_string.op0().id()==ID_symbol); + s=find_or_add_string_of_symbol(to_symbol_expr(unrefined_string.op0())); + } else if(unrefined_string.id()==ID_if) - s = add_axioms_for_if(to_if_expr(unrefined_string)); - else if(unrefined_string.id()==ID_nondet_symbol || unrefined_string.id()==ID_struct) { + s=add_axioms_for_if(to_if_expr(unrefined_string)); + else if(unrefined_string.id()==ID_nondet_symbol + || unrefined_string.id()==ID_struct) + { // We ignore non deterministic symbols and struct } else - { - throw ("add_axioms_for_string_expr:\n" + unrefined_string.pretty() - + "\nwhich is not a function application, a symbol or an if expression"); - } + { + throw("add_axioms_for_string_expr:\n"+unrefined_string.pretty()+ + "\nwhich is not a function application, "+ + "a symbol or an if expression"); + } axioms.push_back(s.longer(refined_string_typet::index_zero())); return s; } - - -string_exprt string_constraint_generatort::add_axioms_for_if(const if_exprt &expr) +string_exprt string_constraint_generatort::add_axioms_for_if +(const if_exprt &expr) { string_exprt res(get_char_type()); - assert(refined_string_typet::is_unrefined_string_type(expr.true_case().type())); - string_exprt t = add_axioms_for_string_expr(expr.true_case()); - assert(refined_string_typet::is_unrefined_string_type(expr.false_case().type())); - string_exprt f = add_axioms_for_string_expr(expr.false_case()); - - axioms.push_back(implies_exprt(expr.cond(),res.same_length(t))); - symbol_exprt qvar = fresh_univ_index("QA_string_if_true"); - axioms.push_back(string_constraintt(qvar,t.length(),expr.cond(),equal_exprt(res[qvar],t[qvar]))); - - axioms.push_back(implies_exprt(expr.cond(),res.same_length(f))); - symbol_exprt qvar2 = fresh_univ_index("QA_string_if_false"); - axioms.push_back(string_constraintt(qvar2,f.length(),not_exprt(expr.cond()), - equal_exprt(res[qvar2],f[qvar2]))); + assert(refined_string_typet::is_unrefined_string_type + (expr.true_case().type())); + string_exprt t=add_axioms_for_string_expr(expr.true_case()); + assert(refined_string_typet::is_unrefined_string_type + (expr.false_case().type())); + string_exprt f=add_axioms_for_string_expr(expr.false_case()); + + axioms.push_back(implies_exprt(expr.cond(), res.same_length(t))); + symbol_exprt qvar=fresh_univ_index("QA_string_if_true"); + equal_exprt qequal(res[qvar], t[qvar]); + axioms.push_back(string_constraintt(qvar, t.length(), expr.cond(), qequal)); + axioms.push_back(implies_exprt(expr.cond(), res.same_length(f))); + symbol_exprt qvar2=fresh_univ_index("QA_string_if_false"); + equal_exprt qequal2(res[qvar2], f[qvar2]); + string_constraintt sc2(qvar2, f.length(), not_exprt(expr.cond()), qequal2); + axioms.push_back(sc2); return res; } -string_exprt string_constraint_generatort::find_or_add_string_of_symbol(const symbol_exprt & sym) +string_exprt string_constraint_generatort::find_or_add_string_of_symbol +(const symbol_exprt & sym) { - irep_idt id = sym.get_identifier(); - std::map::iterator f = symbol_to_string.find(id); - if(f != symbol_to_string.end()) + irep_idt id=sym.get_identifier(); + std::map::iterator f=symbol_to_string.find(id); + if(f!=symbol_to_string.end()) return f->second; symbol_to_string[id]= string_exprt(get_char_type()); @@ -133,53 +148,53 @@ string_exprt string_constraint_generatort::find_or_add_string_of_symbol(const sy exprt string_constraint_generatort::add_axioms_for_function_application (const function_application_exprt & expr) { - const exprt &name = expr.function(); - assert(name.id() == ID_symbol); + const exprt &name=expr.function(); + assert(name.id()==ID_symbol); - const irep_idt &id = is_ssa_expr(name)?to_ssa_expr(name).get_object_name(): + const irep_idt &id=is_ssa_expr(name)?to_ssa_expr(name).get_object_name(): to_symbol_expr(name).get_identifier(); - if (id==ID_cprover_char_literal_func) + if(id==ID_cprover_char_literal_func) return add_axioms_for_char_literal(expr); - else if (id==ID_cprover_string_length_func) + else if(id==ID_cprover_string_length_func) return add_axioms_for_length(expr); - else if (id==ID_cprover_string_equal_func) + else if(id==ID_cprover_string_equal_func) return add_axioms_for_equal(expr); - else if (id==ID_cprover_string_equals_ignore_case_func) + else if(id==ID_cprover_string_equals_ignore_case_func) return add_axioms_for_equals_ignore_case(expr); - else if (id==ID_cprover_string_is_empty_func) + else if(id==ID_cprover_string_is_empty_func) return add_axioms_for_is_empty(expr); - else if (id==ID_cprover_string_char_at_func) + else if(id==ID_cprover_string_char_at_func) return add_axioms_for_char_at(expr); - else if (id==ID_cprover_string_is_prefix_func) + else if(id==ID_cprover_string_is_prefix_func) return add_axioms_for_is_prefix(expr); - else if (id==ID_cprover_string_is_suffix_func) + else if(id==ID_cprover_string_is_suffix_func) return add_axioms_for_is_suffix(expr); - else if (id==ID_cprover_string_startswith_func) - return add_axioms_for_is_prefix(expr,true); - else if (id==ID_cprover_string_endswith_func) - return add_axioms_for_is_suffix(expr,true); - else if (id==ID_cprover_string_contains_func) + else if(id==ID_cprover_string_startswith_func) + return add_axioms_for_is_prefix(expr, true); + else if(id==ID_cprover_string_endswith_func) + return add_axioms_for_is_suffix(expr, true); + else if(id==ID_cprover_string_contains_func) return add_axioms_for_contains(expr); - else if (id==ID_cprover_string_hash_code_func) + else if(id==ID_cprover_string_hash_code_func) return add_axioms_for_hash_code(expr); - else if (id==ID_cprover_string_index_of_func) + else if(id==ID_cprover_string_index_of_func) return add_axioms_for_index_of(expr); - else if (id==ID_cprover_string_last_index_of_func) + else if(id==ID_cprover_string_last_index_of_func) return add_axioms_for_last_index_of(expr); - else if (id==ID_cprover_string_parse_int_func) + else if(id==ID_cprover_string_parse_int_func) return add_axioms_for_parse_int(expr); - else if (id==ID_cprover_string_to_char_array_func) + else if(id==ID_cprover_string_to_char_array_func) return add_axioms_for_to_char_array(expr); - else if (id==ID_cprover_string_code_point_at_func) + else if(id==ID_cprover_string_code_point_at_func) return add_axioms_for_code_point_at(expr); - else if (id==ID_cprover_string_code_point_before_func) + else if(id==ID_cprover_string_code_point_before_func) return add_axioms_for_code_point_before(expr); - else if (id==ID_cprover_string_code_point_count_func) + else if(id==ID_cprover_string_code_point_count_func) return add_axioms_for_code_point_count(expr); - else if (id==ID_cprover_string_offset_by_code_point_func) + else if(id==ID_cprover_string_offset_by_code_point_func) return add_axioms_for_offset_by_code_point(expr); - else if (id==ID_cprover_string_compare_to_func) + else if(id==ID_cprover_string_compare_to_func) return add_axioms_for_compare_to(expr); else if(id==ID_cprover_string_literal_func) return add_axioms_from_literal(expr); @@ -258,11 +273,11 @@ exprt string_constraint_generatort::add_axioms_for_function_application else if(id==ID_cprover_string_data_func) return add_axioms_for_data(expr); else - { - std::string msg("string_exprt::function_application: unknown symbol :"); - msg+=id.c_str(); - throw msg; - } + { + std::string msg("string_exprt::function_application: unknown symbol :"); + msg+=id.c_str(); + throw msg; + } } @@ -270,173 +285,194 @@ irep_idt extract_java_string(const symbol_exprt & s) { std::string tmp(s.get(ID_identifier).c_str()); std::string prefix("java::java.lang.String.Literal."); - assert(has_prefix(tmp,prefix)); - std::string value = tmp.substr(prefix.length()); + assert(has_prefix(tmp, prefix)); + std::string value=tmp.substr(prefix.length()); return irep_idt(value); } -string_exprt string_constraint_generatort::add_axioms_for_constant(irep_idt sval, int char_width, unsignedbv_typet char_type){ - +string_exprt string_constraint_generatort::add_axioms_for_constant +(irep_idt sval, int char_width, unsignedbv_typet char_type) +{ string_exprt res(char_type); - std::string str = sval.c_str(); + std::string str=sval.c_str(); // should only do this for java - std::wstring utf16 = utf8_to_utf16le(str); + std::wstring utf16=utf8_to_utf16le(str); - for (std::size_t i = 0; i < utf16.size(); ++i) { - exprt idx = from_integer(i,refined_string_typet::index_type()); - exprt c = from_integer((unsigned)utf16[i], char_type); + for(std::size_t i=0; i s[i] = s1[i]) && (i >= k ==> s[i] = 0) + // |s|=k + // && forall i s[i]=s1[i]) && (i >= k ==> s[i]=0) axioms.push_back(res.has_length(k)); - symbol_exprt idx = fresh_univ_index("QA_index_set_length"); + symbol_exprt idx=fresh_univ_index("QA_index_set_length"); string_constraintt a1 - (idx, k, and_exprt(implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx],res[idx])), - implies_exprt(s1.shorter(idx), equal_exprt(s1[idx],constant_char(0))))); + (idx, k, and_exprt + (implies_exprt(s1.strictly_longer(idx), equal_exprt(s1[idx], res[idx])), + implies_exprt(s1.shorter(idx), equal_exprt(s1[idx], constant_char(0))))); axioms.push_back(a1); return res; } -string_exprt string_constraint_generatort::add_axioms_for_java_char_array(const exprt & char_array) +string_exprt string_constraint_generatort::add_axioms_for_java_char_array +(const exprt & char_array) { string_exprt res(get_char_type()); - exprt arr = to_address_of_expr(char_array).object(); - exprt len = member_exprt(arr, "length", res.length().type()); - exprt cont = member_exprt(arr, "data", res.content().type()); - res.op0() = len; - res.op1() = cont; + exprt arr=to_address_of_expr(char_array).object(); + exprt len=member_exprt(arr, "length", res.length().type()); + exprt cont=member_exprt(arr, "data", res.content().type()); + res.op0()=len; + res.op1()=cont; return res; } -string_exprt string_constraint_generatort::add_axioms_for_value_of(const function_application_exprt &f) +string_exprt string_constraint_generatort::add_axioms_for_value_of +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - if(args.size() == 3) + const function_application_exprt::argumentst &args=f.arguments(); + if(args.size()==3) { string_exprt res(get_char_type()); - exprt char_array = args[0]; - exprt offset = args[1]; - exprt count = args[2]; - string_exprt str = add_axioms_for_java_char_array(char_array); + exprt char_array=args[0]; + exprt offset=args[1]; + exprt count=args[2]; + string_exprt str=add_axioms_for_java_char_array(char_array); axioms.push_back(res.has_length(count)); - symbol_exprt idx = fresh_univ_index("QA_index_value_of"); - string_constraintt a1(idx, count, equal_exprt(str[plus_exprt(idx,offset)],res[idx])); + symbol_exprt idx=fresh_univ_index("QA_index_value_of"); + equal_exprt eq(str[plus_exprt(idx, offset)], res[idx]); + string_constraintt a1(idx, count, eq); axioms.push_back(a1); return res; } else { - assert(args.size() == 1); + assert(args.size()==1); return add_axioms_for_java_char_array(args[0]); } } @@ -444,33 +480,42 @@ string_exprt string_constraint_generatort::add_axioms_for_value_of(const functio string_exprt string_constraint_generatort::add_axioms_for_substring (const function_application_exprt &f) { - assert(f.arguments().size() >= 2); - string_exprt str = add_axioms_for_string_expr(f.arguments()[0]); + assert(f.arguments().size()>=2); + string_exprt str=add_axioms_for_string_expr(f.arguments()[0]); exprt i(f.arguments()[1]); exprt j; - if(f.arguments().size() == 3) j = f.arguments()[2]; - else { assert(f.arguments().size() == 2); j = str.length(); } - return add_axioms_for_substring(str,i,j); + if(f.arguments().size()==3) + { + j=f.arguments()[2]; + } + else + { + assert(f.arguments().size()==2); + j=str.length(); + } + return add_axioms_for_substring(str, i, j); } string_exprt string_constraint_generatort::add_axioms_for_substring - (const string_exprt & str, const exprt & start, const exprt & end) +(const string_exprt & str, const exprt & start, const exprt & end) { - symbol_exprt idx = fresh_exist_index("index_substring"); - assert(start.type() == refined_string_typet::index_type()); - assert(end.type() == refined_string_typet::index_type()); + symbol_exprt idx=fresh_exist_index("index_substring"); + assert(start.type()==refined_string_typet::index_type()); + assert(end.type()==refined_string_typet::index_type()); string_exprt res(get_char_type()); + exprt is_empty=res.has_length(refined_string_typet::index_zero()); axioms.push_back(implies_exprt(binary_relation_exprt(start, ID_lt, end), - res.has_length(minus_exprt(end, start)))); + res.has_length(minus_exprt(end, start)))); axioms.push_back(implies_exprt(binary_relation_exprt(start, ID_ge, end), - res.has_length(refined_string_typet::index_zero()))); + is_empty)); + // Warning: check what to do if the string is not long enough axioms.push_back(str.longer(end)); - // forall idx < str.length, str[idx] = arg_str[idx+i] + // forall idx= 0 + // a3 : str >= idx + // a4 : |res|>= 0 + // a5 : |res|<=|str| + // (this is necessary to prevent exceeding the biggest integer) + // a6 : forall n res[idx]=str[idx]+'a'-'A' + // a3 : forall idx res[idx]=str[idx] + // forall idx res[idx]=str[idx]+'A'-'a' + // a3 : forall idx res[idx]=str[idx] + exprt a1=res.same_length(str); + axioms.push_back(a1); - axioms.push_back(res.same_length(str)); + symbol_exprt idx=fresh_univ_index("QA_upper_case"); + exprt is_lower_case=and_exprt(binary_relation_exprt(char_a, ID_le, str[idx]), + binary_relation_exprt(str[idx], ID_le, char_z)); + minus_exprt diff(char_A, char_a); + equal_exprt convert(res[idx], plus_exprt(str[idx], diff)); + string_constraintt a2(idx, res.length(), is_lower_case, convert); + axioms.push_back(a2); - symbol_exprt idx = fresh_univ_index("QA_upper_case"); - // forall idx < str.length, this[idx] = 'a'<=str[idx]<='z' ? str[idx]+'A'-'a' : str[idx] - exprt is_lower_case = and_exprt(binary_relation_exprt(char_a,ID_le,str[idx]), - binary_relation_exprt(str[idx],ID_le,char_z)); - equal_exprt convert(res[idx],plus_exprt(str[idx],minus_exprt(char_A,char_a))); equal_exprt eq(res[idx], str[idx]); - string_constraintt a(idx,res.length(),and_exprt(implies_exprt(is_lower_case,convert),implies_exprt(not_exprt(is_lower_case),eq))); - axioms.push_back(a); + string_constraintt a3(idx, res.length(), not_exprt(is_lower_case), eq); + axioms.push_back(a3); return res; } string_exprt string_constraint_generatort::add_axioms_from_int (const function_application_exprt &expr) -{ return add_axioms_from_int(args(expr,1)[0],10); } +{ return add_axioms_from_int(args(expr, 1)[0], 10); } string_exprt string_constraint_generatort::add_axioms_from_long (const function_application_exprt &expr) -{ return add_axioms_from_int(args(expr,1)[0],30); } +{ return add_axioms_from_int(args(expr, 1)[0], 30); } string_exprt string_constraint_generatort::add_axioms_from_float (const function_application_exprt &f) -{ return add_axioms_from_float(args(f,1)[0],false); } +{ return add_axioms_from_float(args(f, 1)[0], false); } string_exprt string_constraint_generatort::add_axioms_from_double (const function_application_exprt &f) -{ return add_axioms_from_float(args(f,1)[0],true); } +{ return add_axioms_from_float(args(f, 1)[0], true); } string_exprt string_constraint_generatort::add_axioms_from_float (const exprt &f, bool double_precision) { // Warning: we currently only have partial specification - unsignedbv_typet char_type = get_char_type(); - size_t char_width = get_char_width(); - + unsignedbv_typet char_type=get_char_type(); string_exprt res(char_type); axioms.push_back(res.shorter(refined_string_typet::index_of_int(24))); - string_exprt magnitude(char_type); string_exprt sign_string(char_type); + string_exprt nan_string=add_axioms_for_constant("NaN"); + + // We add the axioms: + // a1 : If the argument is NaN, the result length is that of "NaN". + // a2 : If the argument is NaN, the result content is the string "NaN". + // a3 : f<0 => |sign_string|=1 + // a4 : f>=0 => |sign_string|=0 + // a5 : f<0 => sign_string[0]='-' + // a6 : f infinite => |magnitude|=|"Infinity"| + // a7 : forall i<|"Infinity"|, f infinite => magnitude[i]="Infinity"[i] + // a8 : f=0 => |magnitude|=|"0.0"| + // a9 : forall i<|"0.0"|, f=0 => f[i]="0.0"[i] + ieee_float_spect fspec= + double_precision?ieee_float_spect::double_precision() + :ieee_float_spect::single_precision(); + + exprt isnan=float_bvt().isnan(f, fspec); + implies_exprt a1(isnan, magnitude.same_length(nan_string)); + axioms.push_back(a1); - // If the argument is NaN, the result is the string "NaN". - string_exprt nan_string = add_axioms_for_constant("NaN",char_width,char_type); - - ieee_float_spect fspec = double_precision?ieee_float_spect::double_precision():ieee_float_spect::single_precision(); - - exprt isnan = float_bvt().isnan(f,fspec); - axioms.push_back(implies_exprt(isnan, magnitude.same_length(nan_string))); - symbol_exprt qvar = fresh_univ_index("QA_equal_nan"); - axioms.push_back - (string_constraintt(qvar, nan_string.length(), - isnan, equal_exprt(magnitude[qvar],nan_string[qvar]))); + symbol_exprt qvar=fresh_univ_index("QA_equal_nan"); + string_constraintt a2(qvar, nan_string.length(), + isnan, equal_exprt(magnitude[qvar], nan_string[qvar])); + axioms.push_back(a2); - // If the argument is not NaN, the result is a string that represents the sign and magnitude (absolute value) of the argument. If the sign is negative, the first character of the result is '-' ('\u002D'); if the sign is positive, no sign character appears in the result. + // If the argument is not NaN, the result is a string that represents + // the sign and magnitude (absolute value) of the argument. + // If the sign is negative, the first character of the result is '-'; + // if the sign is positive, no sign character appears in the result. const bitvector_typet &bv_type=to_bitvector_type(f.type()); unsigned width=bv_type.get_width(); - exprt isneg = extractbit_exprt(f, width-1); + exprt isneg=extractbit_exprt(f, width-1); - axioms.push_back(implies_exprt(isneg, sign_string.has_length(1))); + implies_exprt a3(isneg, sign_string.has_length(1)); + axioms.push_back(a3); - axioms.push_back(implies_exprt(not_exprt(isneg), sign_string.has_length(0))); - axioms.push_back(implies_exprt(isneg,equal_exprt(sign_string[0], constant_char(0x2D)))); + implies_exprt a4(not_exprt(isneg), sign_string.has_length(0)); + axioms.push_back(a4); - // If m is infinity, it is represented by the characters "Infinity"; thus, positive infinity produces the result "Infinity" and negative infinity produces the result "-Infinity". + implies_exprt a5(isneg, equal_exprt(sign_string[0], constant_char('-'))); + axioms.push_back(a5); - string_exprt infinity_string = add_axioms_for_constant("Infinity",char_width,char_type); - exprt isinf = float_bvt().isinf(f,fspec); - axioms.push_back(implies_exprt(isinf, magnitude.same_length(infinity_string))); - symbol_exprt qvar_inf = fresh_univ_index("QA_equal_infinity"); - axioms.push_back - (string_constraintt(qvar_inf, infinity_string.length(), - isinf, equal_exprt(magnitude[qvar_inf],infinity_string[qvar_inf]))); + // If m is infinity, it is represented by the characters "Infinity"; + // thus, positive infinity produces the result "Infinity" and negative + // infinity produces the result "-Infinity". - //If m is zero, it is represented by the characters "0.0"; thus, negative zero produces the result "-0.0" and positive zero produces the result "0.0". + string_exprt infinity_string=add_axioms_for_constant("Infinity"); + exprt isinf=float_bvt().isinf(f, fspec); + implies_exprt a6(isinf, magnitude.same_length(infinity_string)); + axioms.push_back(a6); - string_exprt zero_string = add_axioms_for_constant("0.0", char_width, char_type); - exprt iszero = float_bvt().is_zero(f,fspec); - axioms.push_back(implies_exprt(iszero, magnitude.same_length(zero_string))); - symbol_exprt qvar_zero = fresh_univ_index("QA_equal_zero"); - axioms.push_back - (string_constraintt(qvar_zero, zero_string.length(), iszero, equal_exprt(magnitude[qvar_zero],zero_string[qvar_zero]))); + symbol_exprt qvar_inf=fresh_univ_index("QA_equal_infinity"); + equal_exprt meq(magnitude[qvar_inf], infinity_string[qvar_inf]); + string_constraintt a7(qvar_inf, infinity_string.length(), isinf, meq); + axioms.push_back(a7); + + // If m is zero, it is represented by the characters "0.0"; thus, negative + // zero produces the result "-0.0" and positive zero produces "0.0". - return add_axioms_for_concat(sign_string,magnitude); + string_exprt zero_string=add_axioms_for_constant("0.0"); + exprt iszero=float_bvt().is_zero(f, fspec); + implies_exprt a8(iszero, magnitude.same_length(zero_string)); + axioms.push_back(a8); + + symbol_exprt qvar_zero=fresh_univ_index("QA_equal_zero"); + equal_exprt eq_zero(magnitude[qvar_zero], zero_string[qvar_zero]); + string_constraintt a9(qvar_zero, zero_string.length(), iszero, eq_zero); + axioms.push_back(a9); + + return add_axioms_for_concat(sign_string, magnitude); } string_exprt string_constraint_generatort::add_axioms_from_bool (const function_application_exprt &f) -{ return add_axioms_from_bool(args(f,1)[0]); } +{ return add_axioms_from_bool(args(f, 1)[0]); } string_exprt string_constraint_generatort::add_axioms_from_bool(const exprt &i) { - unsignedbv_typet char_type = get_char_type(); - int char_width = get_char_width(); + unsignedbv_typet char_type=get_char_type(); string_exprt res(char_type); - assert(i.type() == bool_typet() || i.type().id() == ID_c_bool); + assert(i.type()==bool_typet() || i.type().id()==ID_c_bool); - typecast_exprt eq(i,bool_typet()); + typecast_exprt eq(i, bool_typet()); - string_exprt true_string = add_axioms_for_constant("true",char_width,char_type); - string_exprt false_string = add_axioms_for_constant("false",char_width,char_type); + string_exprt true_string=add_axioms_for_constant("true"); + string_exprt false_string=add_axioms_for_constant("false"); axioms.push_back(implies_exprt(eq, res.same_length(true_string))); - symbol_exprt qvar = fresh_univ_index("QA_equal_true"); + symbol_exprt qvar=fresh_univ_index("QA_equal_true"); axioms.push_back - (string_constraintt(qvar,true_string.length(),eq,equal_exprt(res[qvar],true_string[qvar]))); + (string_constraintt(qvar, true_string.length(), eq, + equal_exprt(res[qvar], true_string[qvar]))); axioms.push_back(implies_exprt(not_exprt(eq), res.same_length(false_string))); - symbol_exprt qvar1 = fresh_univ_index("QA_equal_false"); + symbol_exprt qvar1=fresh_univ_index("QA_equal_false"); axioms.push_back - (string_constraintt(qvar,false_string.length(),not_exprt(eq),equal_exprt(res[qvar1],false_string[qvar1]))); + (string_constraintt(qvar, false_string.length(), not_exprt(eq), + equal_exprt(res[qvar1], false_string[qvar1]))); return res; } +// Gives the smallest integer with `nb` digits +int smallest_by_digit(int nb) +{ + int res=1; + for(int i=1; i + // i=sum+str[0]-'0' && all_numbers + // a4 : |res|=size&&res[0]='-' => i=-sum + // a5 : size>1 => |res|=size&&'0'<=res[0]<='9' => res[0]!='0' + // a6 : size>1 => |res|=size&&res[0]'-' => res[1]!='0' + // a7 : size==max_size => i>1000000000 + exprt sum=from_integer(0, type); + exprt all_numbers=true_exprt(); + chr=res[0]; + exprt first_value=typecast_exprt(minus_exprt(chr, zero_char), type); + + for(size_t j=1; j1) { - exprt sum = from_integer(0,type); - exprt all_numbers = true_exprt(); - chr = res[0]; - exprt first_value = typecast_exprt(minus_exprt(chr,zero_char),type); - - for(size_t j=1; j1) - { - axioms.push_back(implies_exprt - (and_exprt(premise,starts_with_digit), - not_exprt(equal_exprt(res[refined_string_typet::index_zero()],zero_char)))); - axioms.push_back(implies_exprt - (and_exprt(premise,starts_with_minus), - not_exprt(equal_exprt(res[refined_string_typet::index_of_int(1)],zero_char)))); - } - - //we have to be careful when exceeding the maximal size of integers - // Warning this should be different depending on max size - if(size == max_size) - { - exprt smallest_with_10_digits = from_integer(1000000000,type); - axioms.push_back(implies_exprt - (premise, binary_relation_exprt - (i,ID_ge,smallest_with_10_digits))); - } + equal_exprt r0_zero(res[zero], zero_char); + implies_exprt a5(and_exprt(premise, starts_with_digit), + not_exprt(r0_zero)); + axioms.push_back(a5); + + exprt one=refined_string_typet::index_of_int(1); + equal_exprt r1_zero(res[one], zero_char); + implies_exprt a6(and_exprt(premise, starts_with_minus), + not_exprt(r1_zero)); + axioms.push_back(a6); } + + // we have to be careful when exceeding the maximal size of integers + // Warning this should be different depending on max size + if(size==max_size) + { + exprt smallest_with_10_digits= + from_integer(smallest_by_digit(max_size), type); + binary_relation_exprt big(i, ID_ge, smallest_with_10_digits); + implies_exprt a7(premise, big); + axioms.push_back(a7); + } + } return res; } @@ -745,68 +888,70 @@ string_exprt string_constraint_generatort::add_axioms_from_int exprt string_constraint_generatort::int_of_hex_char (exprt chr, unsigned char_width, typet char_type) const { - exprt zero_char = constant_char('0'); - exprt nine_char = constant_char('9'); - exprt a_char = constant_char('a'); - return if_exprt(binary_relation_exprt(chr,ID_gt,nine_char), - minus_exprt(chr,constant_char(0x61 - 10)), - minus_exprt(chr,zero_char)); + exprt zero_char=constant_char('0'); + exprt nine_char=constant_char('9'); + exprt a_char=constant_char('a'); + return if_exprt(binary_relation_exprt(chr, ID_gt, nine_char), + minus_exprt(chr, constant_char(0x61-10)), + minus_exprt(chr, zero_char)); } -string_exprt string_constraint_generatort::add_axioms_from_int_hex(const exprt &i) +string_exprt string_constraint_generatort::add_axioms_from_int_hex +(const exprt &i) { string_exprt res(get_char_type()); - typet type = i.type(); - assert(type.id() == ID_signedbv); - exprt sixteen = from_integer(16,type); - exprt minus_char = constant_char('-'); - exprt zero_char = constant_char('0'); - exprt nine_char = constant_char('9'); - exprt a_char = constant_char('a'); - exprt f_char = constant_char('f'); - - size_t max_size = 8; + typet type=i.type(); + assert(type.id()==ID_signedbv); + exprt sixteen=from_integer(16, type); + exprt minus_char=constant_char('-'); + exprt zero_char=constant_char('0'); + exprt nine_char=constant_char('9'); + exprt a_char=constant_char('a'); + exprt f_char=constant_char('f'); + + size_t max_size=8; axioms.push_back(and_exprt(res.strictly_longer(0), - res.shorter(max_size))); + res.shorter(max_size))); + + for(size_t size=1; size<=max_size; size++) + { + exprt sum=from_integer(0, type); + exprt all_numbers=true_exprt(); + exprt chr=res[0]; - for(size_t size=1; size<=max_size;size++) + for(size_t j=0; j1) - axioms.push_back(implies_exprt(premise, not_exprt(equal_exprt(res[0],zero_char)))); + chr=res[j]; + exprt i=int_of_hex_char(chr, get_char_width(), get_char_type()); + sum=plus_exprt(mult_exprt(sum, sixteen), typecast_exprt(i, type)); + or_exprt is_number + (and_exprt(binary_relation_exprt(chr, ID_ge, zero_char), + binary_relation_exprt(chr, ID_le, nine_char)), + and_exprt(binary_relation_exprt(chr, ID_ge, a_char), + binary_relation_exprt(chr, ID_le, f_char))); + all_numbers=and_exprt(all_numbers, is_number); } + + equal_exprt premise(res.has_length(size)); + axioms.push_back + (implies_exprt(premise, and_exprt(equal_exprt(i, sum), all_numbers))); + + // disallow 0s at the beggining + if(size>1) + axioms.push_back + (implies_exprt(premise, not_exprt(equal_exprt(res[0], zero_char)))); + } return res; } string_exprt string_constraint_generatort::add_axioms_from_int_hex (const function_application_exprt &f) -{ return add_axioms_from_int_hex(args(f,1)[0]); } +{ return add_axioms_from_int_hex(args(f, 1)[0]); } string_exprt string_constraint_generatort::add_axioms_from_char (const function_application_exprt &f) -{ return add_axioms_from_char(args(f,1)[0]); } +{ return add_axioms_from_char(args(f, 1)[0]); } string_exprt string_constraint_generatort::add_axioms_from_char(const exprt &c) { @@ -817,32 +962,51 @@ string_exprt string_constraint_generatort::add_axioms_from_char(const exprt &c) } -string_exprt string_constraint_generatort::add_axioms_for_code_point(const exprt &code_point) +string_exprt string_constraint_generatort::add_axioms_for_code_point +(const exprt &code_point) { string_exprt res(get_char_type()); - typet type = code_point.type(); - assert(type.id() == ID_signedbv); - size_t width = to_bitvector_type(type).get_width(); - binary_relation_exprt small(code_point,ID_lt,from_integer(0x010000,signedbv_typet(width))); - axioms.push_back(implies_exprt(small, res.has_length(1))); - axioms.push_back(implies_exprt(not_exprt(small),res.has_length(2))); - axioms.push_back(implies_exprt(small,equal_exprt(res[0],typecast_exprt(code_point,get_char_type())))); + typet type=code_point.type(); + assert(type.id()==ID_signedbv); + + // We add axioms: + // a1 : code_point<0x010000 => |res|=1 + // a2 : code_point>=0x010000 => |res|=2 + // a3 : code_point<0x010000 => res[0]=code_point + // a4 : code_point>=0x010000 => res[0]=0xD800+(code_point-0x10000)/0x0400 + // a5 : code_point>=0x010000 => res[1]=0xDC00+(code_point-0x10000)/0x0400 + // For more explenations about this conversion, see: + // https://en.wikipedia.org/wiki/UTF-16 + + exprt hex010000=from_integer(0x010000, type); + exprt hexD800=from_integer(0xD800, type); + exprt hexDC00=from_integer(0xDC00, type); + exprt hex0400=from_integer(0x0400, type); + + binary_relation_exprt small(code_point, ID_lt, hex010000); + implies_exprt a1(small, res.has_length(1)); + axioms.push_back(a1); - axioms.push_back - (implies_exprt - (not_exprt(small), - equal_exprt(res[0], - typecast_exprt - (plus_exprt(from_integer(0xD800,signedbv_typet(width)), - div_exprt(minus_exprt(code_point,from_integer(0x010000,signedbv_typet(width))),from_integer(0x0400,signedbv_typet(width)))), - get_char_type())))); - axioms.push_back - (implies_exprt + implies_exprt a2(not_exprt(small), res.has_length(2)); + axioms.push_back(a2); + + typecast_exprt code_point_as_char(code_point, get_char_type()); + implies_exprt a3(small, equal_exprt(res[0], code_point_as_char)); + axioms.push_back(a3); + + plus_exprt first_char + (hexD800, div_exprt(minus_exprt(code_point, hex010000), hex0400)); + implies_exprt a4 + (not_exprt(small), + equal_exprt(res[0], typecast_exprt(first_char, get_char_type()))); + axioms.push_back(a4); + + plus_exprt second_char(hexDC00, mod_exprt(code_point, hex0400)); + implies_exprt a5 (not_exprt(small), - equal_exprt(res[1],typecast_exprt - (plus_exprt(from_integer(0xDC00,signedbv_typet(width)), - mod_exprt(code_point,from_integer(0x0400,signedbv_typet(width)))), - get_char_type())))); + equal_exprt(res[1], typecast_exprt(second_char, get_char_type()))); + axioms.push_back(a5); + return res; } @@ -851,9 +1015,9 @@ string_exprt string_constraint_generatort::add_axioms_for_char_set (const function_application_exprt &f) { string_exprt res(get_char_type()); - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - with_exprt sarrnew(str.content(), args(f,3)[1], args(f,3)[2]); - implies_exprt lemma(binary_relation_exprt(args(f,3)[1], ID_lt, str.length()), + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + with_exprt sarrnew(str.content(), args(f, 3)[1], args(f, 3)[2]); + implies_exprt lemma(binary_relation_exprt(args(f, 3)[1], ID_lt, str.length()), and_exprt(equal_exprt(res.content(), sarrnew), res.same_length(str))); axioms.push_back(lemma); @@ -863,204 +1027,215 @@ string_exprt string_constraint_generatort::add_axioms_for_char_set string_exprt string_constraint_generatort::add_axioms_for_replace (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - exprt oldChar = args(f,3)[1]; - exprt newChar = args(f,3)[2]; + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + exprt oldChar=args(f, 3)[1]; + exprt newChar=args(f, 3)[2]; string_exprt res(get_char_type()); + // We add axioms: + // a1 : |res| = |str| + // a2 : forall qvar, 0<=qvar<|res|, + // str[qvar]=oldChar => res[qvar]=newChar + // !str[qvar]=oldChar => res[qvar]=str[qvar] + axioms.push_back(res.same_length(str)); - symbol_exprt qvar = fresh_univ_index("QA_replace"); - axioms.push_back - (string_constraintt - (qvar,res.length(), - and_exprt - (implies_exprt(equal_exprt(str[qvar],oldChar),equal_exprt(res[qvar],newChar)), - implies_exprt(not_exprt(equal_exprt(str[qvar],oldChar)), - equal_exprt(res[qvar],str[qvar]))))); + + symbol_exprt qvar=fresh_univ_index("QA_replace"); + implies_exprt case1(equal_exprt(str[qvar], oldChar), + equal_exprt(res[qvar], newChar)); + implies_exprt case2(not_exprt(equal_exprt(str[qvar], oldChar)), + equal_exprt(res[qvar], str[qvar])); + string_constraintt a1(qvar, res.length(), and_exprt(case1, case2)); + axioms.push_back(a1); return res; } string_exprt string_constraint_generatort::add_axioms_for_delete_char_at (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); - exprt index_one = refined_string_typet::index_of_int(1); - return add_axioms_for_delete(str,args(f,2)[1],plus_exprt(args(f,2)[1],index_one)); + string_exprt str=add_axioms_for_string_expr(args(f, 2)[0]); + exprt index_one=refined_string_typet::index_of_int(1); + return add_axioms_for_delete(str, args(f, 2)[1], + plus_exprt(args(f, 2)[1], index_one)); } string_exprt string_constraint_generatort::add_axioms_for_delete (const string_exprt &str, const exprt & start, const exprt & end) { - assert(start.type() == refined_string_typet::index_type()); - assert(end.type() == refined_string_typet::index_type()); - string_exprt str1 = add_axioms_for_substring(str,refined_string_typet::index_zero(),start); - string_exprt str2 = add_axioms_for_substring(str,end,str.length()); - return add_axioms_for_concat(str1,str2); + assert(start.type()==refined_string_typet::index_type()); + assert(end.type()==refined_string_typet::index_type()); + string_exprt str1=add_axioms_for_substring + (str, refined_string_typet::index_zero(), start); + string_exprt str2=add_axioms_for_substring(str, end, str.length()); + return add_axioms_for_concat(str1, str2); } string_exprt string_constraint_generatort::add_axioms_for_delete (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - return add_axioms_for_delete(str,args(f,3)[1],args(f,3)[2]); + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + return add_axioms_for_delete(str, args(f, 3)[1], args(f, 3)[2]); } string_exprt string_constraint_generatort::add_axioms_for_concat_int (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_int(args(f,2)[1],10); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_int(args(f, 2)[1], 10); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_long (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_int(args(f,2)[1],30); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_int(args(f, 2)[1], 30); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_bool (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_bool(args(f,2)[1]); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_bool(args(f, 2)[1]); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_char (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_char(args(f,2)[1]); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_char(args(f, 2)[1]); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_double (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_float(args(f,2)[1],30); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_float(args(f, 2)[1], 30); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_float (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_from_float(args(f,2)[1],10); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_from_float(args(f, 2)[1], 10); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_concat_code_point (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_for_code_point(args(f,2)[1]); - return add_axioms_for_concat(s1,s2); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_for_code_point(args(f, 2)[1]); + return add_axioms_for_concat(s1, s2); } string_exprt string_constraint_generatort::add_axioms_for_insert (const string_exprt & s1, const string_exprt & s2, const exprt & offset) { - assert(offset.type() == refined_string_typet::index_type()); - string_exprt pref = add_axioms_for_substring(s1,refined_string_typet::index_zero(),offset); - string_exprt suf = add_axioms_for_substring(s1,offset,s1.length()); - string_exprt concat1 = add_axioms_for_concat(pref,s2); - return add_axioms_for_concat(concat1,suf); + assert(offset.type()==refined_string_typet::index_type()); + string_exprt pref=add_axioms_for_substring + (s1, refined_string_typet::index_zero(), offset); + string_exprt suf=add_axioms_for_substring(s1, offset, s1.length()); + string_exprt concat1=add_axioms_for_concat(pref, s2); + return add_axioms_for_concat(concat1, suf); } string_exprt string_constraint_generatort::add_axioms_for_insert (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_for_string_expr(args(f,3)[2]); - return add_axioms_for_insert(s1, s2, args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_for_string_expr(args(f, 3)[2]); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_int (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_int(args(f,3)[2],10); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_int(args(f, 3)[2], 10); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_long (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_int(args(f,3)[2],30); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_int(args(f, 3)[2], 30); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_bool (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_bool(args(f,3)[2]); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_bool(args(f, 3)[2]); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_char (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_char(args(f,3)[2]); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_char(args(f, 3)[2]); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_double (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_float(args(f,3)[2]); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_float(args(f, 3)[2]); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } string_exprt string_constraint_generatort::add_axioms_for_insert_float (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,3)[0]); - string_exprt s2 = add_axioms_from_float(args(f,3)[2]); - return add_axioms_for_insert(s1,s2,args(f,3)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 3)[0]); + string_exprt s2=add_axioms_from_float(args(f, 3)[2]); + return add_axioms_for_insert(s1, s2, args(f, 3)[1]); } exprt string_constraint_generatort::add_axioms_for_equal (const function_application_exprt &f) - { - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt eq = fresh_boolean("equal"); - typecast_exprt tc_eq(eq,f.type()); +{ + assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); + symbol_exprt eq=fresh_boolean("equal"); + typecast_exprt tc_eq(eq, f.type()); - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_for_string_expr(args(f,2)[1]); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_for_string_expr(args(f, 2)[1]); // We want to write: - // eq <=> (s1.length = s2.length && forall i < s1.length. s1[i] = s2[i]) - // We can't do it directly because of the universal quantification inside. - // So we say instead the three following: - // eq => s1.length = s2.length - // forall i < s1.length. eq => s1[i] = s2[i] - // !eq => s1.length != s2.length || (witness < s1.length && s1[witness] != s2[witness]) - - symbol_exprt witness = fresh_exist_index("witness_unequal"); - symbol_exprt qvar = fresh_univ_index("QA_equal"); + // eq <=> (s1.length=s2.length && forall i s1.length=s2.length + // a2 : forall i s1[i]=s2[i] + // a3 : !eq => s1.length!=s2.length + // || (witness |s1|=|s2| + // a2 : forall qvar, 0<=qvar<|s1|, + // eq => char_equal_ignore_case(s1[qvar],s2[qvar]); + // a3 : !eq => |s1|!=s2 || (0 <=witness<|s1| && !char_equal_ignore_case) - axioms.push_back - (string_constraintt(qvar,s1.length(),eq,character_equals_ignore_case(s1[qvar],s2[qvar],char_a,char_A,char_Z))); + implies_exprt a1(eq, s1.same_length(s2)); + axioms.push_back(a1); - axioms.push_back - (implies_exprt - (not_exprt(eq), - or_exprt(notequal_exprt(s1.length(), s2.length()), - and_exprt(binary_relation_exprt(witness,ID_lt,s1.length()), - and_exprt(binary_relation_exprt(witness,ID_ge, - refined_string_typet::index_zero()), - not_exprt(character_equals_ignore_case(s1[witness],s2[witness],char_a,char_A,char_Z))))))); + symbol_exprt qvar=fresh_univ_index("QA_equal_ignore_case"); + exprt constr2= + character_equals_ignore_case(s1[qvar], s2[qvar], char_a, char_A, char_Z); + string_constraintt a2(qvar, s1.length(), eq, constr2); + axioms.push_back(a2); + + symbol_exprt witness=fresh_exist_index("witness_unequal_ignore_case"); + exprt zero=refined_string_typet::index_zero(); + and_exprt bound_witness + (binary_relation_exprt(witness, ID_lt, s1.length()), + binary_relation_exprt(witness, ID_ge, zero)); + exprt witness_eq=character_equals_ignore_case + (s1[witness], s2[witness], char_a, char_A, char_Z); + not_exprt witness_diff(witness_eq); + implies_exprt a3(not_exprt(eq), + or_exprt(notequal_exprt(s1.length(), s2.length()), + and_exprt(bound_witness, witness_diff))); + axioms.push_back(a3); return tc_eq; } @@ -1113,49 +1307,59 @@ exprt string_constraint_generatort::add_axioms_for_equals_ignore_case exprt string_constraint_generatort::add_axioms_for_length (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); + string_exprt str=add_axioms_for_string_expr(args(f, 1)[0]); return str.length(); } exprt string_constraint_generatort::add_axioms_for_data (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - exprt tab_data = args(f,3)[1]; - exprt data = args(f,3)[2]; - symbol_exprt qvar = fresh_univ_index("QA_string_data"); + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + exprt tab_data=args(f, 3)[1]; + exprt data=args(f, 3)[2]; + symbol_exprt qvar=fresh_univ_index("QA_string_data"); + // translating data[qvar] to the correct expression - // which is (signed int)byte_extract_little_endian(data, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian(tab.data, 0l, unsigned short int *)), unsigned short int) - exprt char_in_tab = typecast_exprt - (byte_extract_exprt(ID_byte_extract_little_endian,data, - plus_exprt - (mult_exprt(from_integer(2,signedbv_typet(64)),typecast_exprt(qvar,signedbv_typet(64))), - pointer_offset(byte_extract_exprt - (ID_byte_extract_little_endian, - tab_data - ,from_integer(0,signedbv_typet(64)),pointer_typet(unsignedbv_typet(16))))),unsignedbv_typet(16)), - get_char_type()); - - string_constraintt eq(qvar,str.length(),equal_exprt(str[qvar],char_in_tab)); + // which is (signed int)byte_extract_little_endian + // (data, (2l*qvar) + POINTER_OFFSET(byte_extract_little_endian + // (tab.data, 0l, unsigned short int *)), unsigned short int) + mult_exprt qvar2(from_integer(2, signedbv_typet(64)), + typecast_exprt(qvar, signedbv_typet(64))); + byte_extract_exprt extract( + ID_byte_extract_little_endian, + tab_data, + from_integer(0, signedbv_typet(64)), + pointer_typet(unsignedbv_typet(16))); + plus_exprt arg2(qvar2, pointer_offset(extract)); + + byte_extract_exprt extract2 + (ID_byte_extract_little_endian, data, arg2, unsignedbv_typet(16)); + exprt char_in_tab= typecast_exprt(extract2, get_char_type()); + + string_constraintt eq + (qvar, str.length(), equal_exprt(str[qvar], char_in_tab)); axioms.push_back(eq); exprt void_expr; - void_expr.type() = void_typet(); + void_expr.type()=void_typet(); return void_expr; } -string_exprt string_constraint_generatort::add_axioms_from_char_array -(const exprt & length, const exprt & data, const exprt & offset, const exprt & count) +string_exprt string_constraint_generatort::add_axioms_from_char_array( + const exprt & length, + const exprt & data, + const exprt & offset, + const exprt & count) { string_exprt str(get_char_type()); - symbol_exprt qvar = fresh_univ_index("QA_string_of_char_array"); - exprt char_in_tab = data; - assert(char_in_tab.id() == ID_index); - char_in_tab.op1() = plus_exprt(qvar,offset); + symbol_exprt qvar=fresh_univ_index("QA_string_of_char_array"); + exprt char_in_tab=data; + assert(char_in_tab.id()==ID_index); + char_in_tab.op1()=plus_exprt(qvar, offset); - string_constraintt eq(qvar,count,equal_exprt(str[qvar],char_in_tab)); + string_constraintt eq(qvar, count, equal_exprt(str[qvar], char_in_tab)); axioms.push_back(eq); - axioms.push_back(equal_exprt(str.length(),count)); + axioms.push_back(equal_exprt(str.length(), count)); return str; } @@ -1165,20 +1369,20 @@ string_exprt string_constraint_generatort::add_axioms_from_char_array { exprt offset; exprt count; - if(f.arguments().size() == 4) - { - offset = f.arguments()[2]; - count = f.arguments()[3]; - } + if(f.arguments().size()==4) + { + offset=f.arguments()[2]; + count=f.arguments()[3]; + } else - { - assert(f.arguments().size() == 2); - count = f.arguments()[0]; - offset = from_integer(0,signedbv_typet(32)); - } - exprt tab_length = f.arguments()[0]; - exprt data = f.arguments()[1]; - return add_axioms_from_char_array(tab_length,data,offset,count); + { + assert(f.arguments().size()==2); + count=f.arguments()[0]; + offset=from_integer(0, signedbv_typet(32)); + } + exprt tab_length=f.arguments()[0]; + exprt data=f.arguments()[1]; + return add_axioms_from_char_array(tab_length, data, offset, count); } string_exprt string_constraint_generatort::add_axioms_for_insert_char_array @@ -1186,406 +1390,496 @@ string_exprt string_constraint_generatort::add_axioms_for_insert_char_array { exprt offset; exprt count; - if(f.arguments().size() == 6) - { - offset = f.arguments()[4]; - count = f.arguments()[5]; - } + if(f.arguments().size()==6) + { + offset=f.arguments()[4]; + count=f.arguments()[5]; + } else - { - assert(f.arguments().size() == 4); - count = f.arguments()[2]; - offset = from_integer(0,signedbv_typet(32)); - } + { + assert(f.arguments().size()==4); + count=f.arguments()[2]; + offset=from_integer(0, signedbv_typet(32)); + } - string_exprt str = add_axioms_for_string_expr(f.arguments()[0]); - exprt length = f.arguments()[2]; - exprt data = f.arguments()[3]; - string_exprt arr = add_axioms_from_char_array(length,data,offset,count); - return add_axioms_for_insert(str,arr,f.arguments()[1]); + string_exprt str=add_axioms_for_string_expr(f.arguments()[0]); + exprt length=f.arguments()[2]; + exprt data=f.arguments()[3]; + string_exprt arr=add_axioms_from_char_array(length, data, offset, count); + return add_axioms_for_insert(str, arr, f.arguments()[1]); } exprt is_positive(const exprt & x) -{ return binary_relation_exprt(x, ID_ge, refined_string_typet::index_of_int(0)); } - - -exprt string_constraint_generatort::add_axioms_for_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset) { - symbol_exprt isprefix = fresh_boolean("isprefix"); - axioms.push_back(implies_exprt(isprefix, str.longer(plus_exprt(prefix.length(),offset)))); + return binary_relation_exprt + (x, ID_ge, refined_string_typet::index_of_int(0)); +} - // forall 0 <= witness < prefix.length. isprefix => s0[witness+offset] = s2[witness] - symbol_exprt qvar = fresh_univ_index("QA_isprefix"); - axioms.push_back - (string_constraintt(qvar,prefix.length(),isprefix, equal_exprt(str[plus_exprt(qvar,offset)],prefix[qvar]))); - symbol_exprt witness = fresh_exist_index("witness_not_isprefix"); +exprt string_constraint_generatort::add_axioms_for_is_prefix + (const string_exprt &prefix, const string_exprt &str, const exprt & offset) +{ + symbol_exprt isprefix=fresh_boolean("isprefix"); + + // We add axioms: + // a1 : isprefix => |str| >= |prefix|+offset + // a2 : forall 0<=qvar + // s0[witness+offset]=s2[witness] + // a3 : !isprefix => |str| < |prefix|+offset + // || (|str| >= |prefix|+offset && 0<=witness<|prefix| + // && str[witness+ofsset]!=prefix[witness]) + implies_exprt a1(isprefix, str.longer(plus_exprt(prefix.length(), offset))); + axioms.push_back(a1); - or_exprt s0_notpref_s1(not_exprt(str.longer(plus_exprt(prefix.length(),offset))), - and_exprt - (str.longer(plus_exprt(prefix.length(),offset)), - and_exprt(is_positive(witness), - and_exprt(prefix.strictly_longer(witness), - notequal_exprt(str[plus_exprt(witness,offset)],prefix[witness]))))); + symbol_exprt qvar=fresh_univ_index("QA_isprefix"); + string_constraintt a2 + (qvar, prefix.length(), isprefix, + equal_exprt(str[plus_exprt(qvar, offset)], prefix[qvar])); + axioms.push_back(a2); - axioms.push_back(implies_exprt(not_exprt(isprefix),s0_notpref_s1)); + symbol_exprt witness=fresh_exist_index("witness_not_isprefix"); + and_exprt witness_diff + (is_positive(witness), + and_exprt(prefix.strictly_longer(witness), + notequal_exprt(str[plus_exprt(witness, offset)], + prefix[witness]))); + or_exprt s0_notpref_s1 + (not_exprt(str.longer(plus_exprt(prefix.length(), offset))), + and_exprt(str.longer(plus_exprt(prefix.length(), offset)), witness_diff)); + + implies_exprt a3(not_exprt(isprefix), s0_notpref_s1); + axioms.push_back(a3); return isprefix; } exprt string_constraint_generatort::add_axioms_for_is_prefix (const function_application_exprt &f, bool swap_arguments) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - string_exprt s0 = add_axioms_for_string_expr(args[swap_arguments?1:0]); - string_exprt s1 = add_axioms_for_string_expr(args[swap_arguments?0:1]); + const function_application_exprt::argumentst &args=f.arguments(); + assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); + string_exprt s0=add_axioms_for_string_expr(args[swap_arguments?1:0]); + string_exprt s1=add_axioms_for_string_expr(args[swap_arguments?0:1]); exprt offset; - if(args.size() == 2) offset = refined_string_typet::index_zero(); - else if (args.size() == 3) offset = args[2]; - return typecast_exprt(add_axioms_for_is_prefix(s0,s1,offset),f.type()); + if(args.size()==2) + offset=refined_string_typet::index_zero(); + else if(args.size()==3) + offset=args[2]; + return typecast_exprt(add_axioms_for_is_prefix(s0, s1, offset), f.type()); } exprt string_constraint_generatort::add_axioms_for_is_empty (const function_application_exprt &f) { - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt is_empty = fresh_boolean("is_empty"); - string_exprt s0 = add_axioms_for_string_expr(args(f,1)[0]); + assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); + symbol_exprt is_empty=fresh_boolean("is_empty"); + string_exprt s0=add_axioms_for_string_expr(args(f, 1)[0]); axioms.push_back(implies_exprt(is_empty, s0.has_length(0))); - axioms.push_back(implies_exprt(s0.has_length(0),is_empty)); - return typecast_exprt(is_empty,f.type()); - + axioms.push_back(implies_exprt(s0.has_length(0), is_empty)); + return typecast_exprt(is_empty, f.type()); } exprt string_constraint_generatort::add_axioms_for_is_suffix (const function_application_exprt &f, bool swap_arguments) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); // bad args to string issuffix? - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - - symbol_exprt issuffix = fresh_boolean("issuffix"); - typecast_exprt tc_issuffix(issuffix,f.type()); - string_exprt s0 = add_axioms_for_string_expr(args[swap_arguments?1:0]); - string_exprt s1 = add_axioms_for_string_expr(args[swap_arguments?0:1]); - - // issufix(s1,s0) => s0.length >= s1.length - // && forall witness < s1.length. - // issufix => s1[witness] = s0[witness + s0.length - s1.length] - // && !issuffix => s1.length > s0.length - // || (s1.length > witness && s1[witness] != s0[witness + s0.length - s1.length] - - axioms.push_back(implies_exprt(issuffix, s1.longer(s0))); - - symbol_exprt qvar = fresh_univ_index("QA_suffix"); - exprt qvar_shifted = plus_exprt(qvar, - minus_exprt(s1.length(), s0.length())); - axioms.push_back - (string_constraintt(qvar, s0.length(), issuffix, equal_exprt(s0[qvar],s1[qvar_shifted]))); - - symbol_exprt witness = fresh_exist_index("witness_not_suffix"); + const function_application_exprt::argumentst &args=f.arguments(); + assert(args.size()==2); // bad args to string issuffix? + assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); + + symbol_exprt issuffix=fresh_boolean("issuffix"); + typecast_exprt tc_issuffix(issuffix, f.type()); + string_exprt s0=add_axioms_for_string_expr(args[swap_arguments?1:0]); + string_exprt s1=add_axioms_for_string_expr(args[swap_arguments?0:1]); + + // We add axioms: + // a1 : issufix => s0.length >= s1.length + // a2 : forall witness s1[witness]=s0[witness + s0.length-s1.length] + // a3 : !issuffix => + // s1.length > s0.length + // || (s1.length > witness>=0 + // && s1[witness]!=s0[witness + s0.length-s1.length] + + implies_exprt a1(issuffix, s1.longer(s0)); + axioms.push_back(a1); - exprt shifted = plus_exprt(witness, - minus_exprt(s1.length(), s0.length())); + symbol_exprt qvar=fresh_univ_index("QA_suffix"); + exprt qvar_shifted=plus_exprt(qvar, minus_exprt(s1.length(), s0.length())); + string_constraintt a2(qvar, s0.length(), issuffix, + equal_exprt(s0[qvar], s1[qvar_shifted])); + axioms.push_back(a2); - implies_exprt lemma2(not_exprt(issuffix), - and_exprt(is_positive(witness), - or_exprt(s0.strictly_longer(s1), - and_exprt(s0.strictly_longer(witness), - notequal_exprt(s0[witness],s1[shifted]))))); + symbol_exprt witness=fresh_exist_index("witness_not_suffix"); + exprt shifted=plus_exprt(witness, minus_exprt(s1.length(), s0.length())); + or_exprt constr3(s0.strictly_longer(s1), + and_exprt(notequal_exprt(s0[witness], s1[shifted]), + and_exprt(s0.strictly_longer(witness), + is_positive(witness)))); + implies_exprt a3(not_exprt(issuffix), constr3); - axioms.push_back(lemma2); + axioms.push_back(a3); return tc_issuffix; } exprt string_constraint_generatort::add_axioms_for_contains -( const function_application_exprt &f) -{ - assert(f.type() == bool_typet() || f.type().id() == ID_c_bool); - symbol_exprt contains = fresh_boolean("contains"); - typecast_exprt tc_contains(contains,f.type()); - string_exprt s0 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[1]); - - // contains => s0.length >= s1.length - // && startpos <= s0.length - s1.length - // && forall qvar < s1.length. - // contains => s1[qvar] = s0[startpos + qvar] - // !contains => s1.length > s0.length - // || (forall startpos <= s0.length - s1.length. - // exists witness < s1.length && s1[witness] != s0[witness + startpos] - - axioms.push_back(implies_exprt(contains, s0.longer(s1))); - symbol_exprt startpos = fresh_exist_index("startpos_contains"); - axioms.push_back( - and_exprt(is_positive(startpos),binary_relation_exprt(startpos, ID_le, minus_exprt(s0.length(),s1.length())))); - - symbol_exprt qvar = fresh_univ_index("QA_contains"); - exprt qvar_shifted = plus_exprt(qvar, startpos); - axioms.push_back - (string_constraintt(qvar,s1.length(),contains,equal_exprt(s1[qvar],s0[qvar_shifted]))); +(const function_application_exprt &f) +{ + assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); + symbol_exprt contains=fresh_boolean("contains"); + typecast_exprt tc_contains(contains, f.type()); + string_exprt s0=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[1]); + + // We add axioms: + // a1 : contains => s0.length >= s1.length + // a2 : 0 <= startpos <= s0.length-s1.length + // a3 : forall qvar s1[qvar]=s0[startpos + qvar] + // a4 : !contains => s1.length > s0.length + // || (forall startpos <= s0.length-s1.length. + // exists witness= |s1| ) - // ==> exists witness < |s1|. s1[witness] != s0[startpos+witness] - axioms.push_back - (string_not_contains_constraintt - (refined_string_typet::index_zero(),plus_exprt(refined_string_typet::index_of_int(1),minus_exprt(s0.length(),s1.length())), - and_exprt(not_exprt(contains),s0.longer(s1)),refined_string_typet::index_zero(),s1.length(),s0,s1)); + // forall startpos <= |s0|-|s1|. (!contains && |s0| >= |s1| ) + // ==> exists witness<|s1|. s1[witness]!=s0[startpos+witness] + string_not_contains_constraintt a4 + (refined_string_typet::index_zero(), + plus_exprt(refined_string_typet::index_of_int(1), length_diff), + and_exprt(not_exprt(contains), s0.longer(s1)), + refined_string_typet::index_zero(), s1.length(), s0, s1); + axioms.push_back(a4); return tc_contains; } -exprt string_constraint_generatort::add_axioms_for_hash_code(const function_application_exprt &f) +exprt string_constraint_generatort::add_axioms_for_hash_code +(const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); - typet return_type = f.type(); + string_exprt str=add_axioms_for_string_expr(args(f, 1)[0]); + typet return_type=f.type(); // initialisation of the missing pool variable std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(hash.find(it->second) == hash.end()) - hash[it->second] = string_exprt::fresh_symbol("hash", return_type); + for(it=symbol_to_string.begin(); it!=symbol_to_string.end(); it++) + if(hash.find(it->second)==hash.end()) + hash[it->second]=string_exprt::fresh_symbol("hash", return_type); - // for each string s. - // hash(str) = hash(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + // for each string s. either: + // c1: hash(str)=hash(s) + // c2: |str|!=|s| + // c3: (|str|==|s| && exists i<|s|. s[i]!=str[i]) // WARNING: the specification may be incomplete - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - { - symbol_exprt i = fresh_exist_index("index_hash"); - axioms.push_back - (or_exprt - (equal_exprt(hash[it->second],hash[str]), - or_exprt - (not_exprt(equal_exprt(it->second.length(),str.length())), - and_exprt(equal_exprt(it->second.length(),str.length()), - and_exprt - (not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str.strictly_longer(i),is_positive(i)) - ))))); - } + for(it=symbol_to_string.begin(); it!=symbol_to_string.end(); it++) + { + symbol_exprt i=fresh_exist_index("index_hash"); + equal_exprt c1(hash[it->second], hash[str]); + not_exprt c2(equal_exprt(it->second.length(), str.length())); + and_exprt c3(equal_exprt(it->second.length(), str.length()), + and_exprt(not_exprt(equal_exprt(str[i], it->second[i])), + and_exprt(str.strictly_longer(i), is_positive(i)))); + axioms.push_back(or_exprt(c1, or_exprt(c2, c3))); + } return hash[str]; } exprt string_constraint_generatort::add_axioms_for_index_of (const string_exprt &str, const exprt & c, const exprt & from_index) { - symbol_exprt index = fresh_exist_index("index_of"); - symbol_exprt contains = fresh_boolean("contains_in_index_of"); + symbol_exprt index=fresh_exist_index("index_of"); + symbol_exprt contains=fresh_boolean("contains_in_index_of"); - // from_index <= i < |s| && (i = -1 <=> !contains) && (contains => i >= from_index && s[i] = c) - // && forall n. from_index <= n < i => s[n] != c + // We add axioms: + // a1 : -1 <= index<|str| + // a2 : !contains <=> index=-1 + // a3 : contains => from_index<=index&&str[index]=c + // a4 : forall n, from_index<=n str[n]!=c + // a5 : forall m, from_index<=n<|str|. !contains => str[m]!=c - axioms.push_back - ( - and_exprt(implies_exprt - (equal_exprt(index,refined_string_typet::index_of_int(-1)), - not_exprt(contains)), - and_exprt(binary_relation_exprt(index,ID_ge,refined_string_typet::index_of_int(-1)), - binary_relation_exprt(index,ID_lt,str.length())))); - axioms.push_back(implies_exprt(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1)))); - axioms.push_back(implies_exprt(contains,and_exprt(binary_relation_exprt(from_index,ID_le,index),equal_exprt(str[index],c)))); + exprt minus1=refined_string_typet::index_of_int(-1); + and_exprt a1(binary_relation_exprt(index, ID_ge, minus1), + binary_relation_exprt(index, ID_lt, str.length())); + axioms.push_back(a1); + + equal_exprt a2(not_exprt(contains), equal_exprt(index, minus1)); + axioms.push_back(a2); - symbol_exprt n = fresh_univ_index("QA_index_of"); - axioms.push_back(string_constraintt - (n,from_index,index,contains,not_exprt(equal_exprt(str[n],c)))); + implies_exprt a3 + (contains, and_exprt(binary_relation_exprt(from_index, ID_le, index), + equal_exprt(str[index], c))); + axioms.push_back(a3); - symbol_exprt m = fresh_univ_index("QA_index_of"); + symbol_exprt n=fresh_univ_index("QA_index_of"); + string_constraintt a4 + (n, from_index, index, contains, not_exprt(equal_exprt(str[n], c))); + axioms.push_back(a4); - axioms.push_back(string_constraintt - (m,from_index,str.length(),not_exprt(contains),not_exprt(equal_exprt(str[m],c)))); + symbol_exprt m=fresh_univ_index("QA_index_of"); + string_constraintt a5(m, from_index, str.length(), not_exprt(contains), + not_exprt(equal_exprt(str[m], c))); + axioms.push_back(a5); return index; } -exprt string_constraint_generatort::add_axioms_for_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::add_axioms_for_index_of_string( + const string_exprt &str, + const string_exprt & substring, + const exprt & from_index) { - symbol_exprt offset = fresh_exist_index("index_of"); - symbol_exprt contains = fresh_boolean("contains_substring"); - axioms.push_back(implies_exprt(contains, and_exprt - (str.longer(plus_exprt(substring.length(),offset)), - binary_relation_exprt(offset,ID_ge,from_index)))); - axioms.push_back(implies_exprt(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1)))); + symbol_exprt offset=fresh_exist_index("index_of"); + symbol_exprt contains=fresh_boolean("contains_substring"); - // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); - axioms.push_back - (string_constraintt(qvar, substring.length(), contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]))); + // We add axioms: + // a1 : contains => |substring|>=offset>=from_index + // a2 : !contains => offset=-1 + // a3 : forall 0 <= witness str[witness+offset]=substring[witness] + + implies_exprt a1 + (contains, and_exprt(str.longer(plus_exprt(substring.length(), offset)), + binary_relation_exprt(offset, ID_ge, from_index))); + axioms.push_back(a1); + + implies_exprt a2(not_exprt(contains), + equal_exprt(offset, refined_string_typet::index_of_int(-1))); + axioms.push_back(a2); + + symbol_exprt qvar=fresh_univ_index("QA_index_of_string"); + string_constraintt a3(qvar, substring.length(), contains, + equal_exprt(str[plus_exprt(qvar, offset)], + substring[qvar])); + axioms.push_back(a3); return offset; } -exprt string_constraint_generatort::add_axioms_for_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index) +exprt string_constraint_generatort::add_axioms_for_last_index_of_string( + const string_exprt &str, + const string_exprt & substring, + const exprt & from_index) { - symbol_exprt offset = fresh_exist_index("index_of"); - symbol_exprt contains = fresh_boolean("contains_substring"); - axioms.push_back(implies_exprt(contains, and_exprt - (str.longer(plus_exprt(substring.length(),offset)), - binary_relation_exprt(offset,ID_le,from_index)))); - axioms.push_back(implies_exprt(not_exprt(contains), equal_exprt(offset,refined_string_typet::index_of_int(-1)))); + symbol_exprt offset=fresh_exist_index("index_of"); + symbol_exprt contains=fresh_boolean("contains_substring"); - // forall 0 <= witness < substring.length. contains => str[witness+offset] = substring[witness] - symbol_exprt qvar = fresh_univ_index("QA_index_of_string"); - axioms.push_back - (string_constraintt(qvar, substring.length(), contains, equal_exprt(str[plus_exprt(qvar,offset)],substring[qvar]))); + // We add axioms: + // a1 : contains => |substring| >= length && offset <= from_index + // a2 : !contains => offset=-1 + // a3 : forall 0 <= witness str[witness+offset]=substring[witness] + + implies_exprt a1(contains, and_exprt + (str.longer(plus_exprt(substring.length(), offset)), + binary_relation_exprt(offset, ID_le, from_index))); + axioms.push_back(a1); + + implies_exprt a2(not_exprt(contains), + equal_exprt(offset, refined_string_typet::index_of_int(-1))); + axioms.push_back(a2); + + symbol_exprt qvar=fresh_univ_index("QA_index_of_string"); + equal_exprt constr3(str[plus_exprt(qvar, offset)], substring[qvar]); + string_constraintt a3(qvar, substring.length(), contains, constr3); + axioms.push_back(a3); return offset; } exprt string_constraint_generatort::add_axioms_for_index_of -( const function_application_exprt &f) +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == refined_string_typet::index_type()); - string_exprt str = add_axioms_for_string_expr(args[0]); - exprt c = args[1]; + const function_application_exprt::argumentst &args=f.arguments(); + assert(f.type()==refined_string_typet::index_type()); + string_exprt str=add_axioms_for_string_expr(args[0]); + exprt c=args[1]; exprt from_index; - if(args.size() == 2) from_index = refined_string_typet::index_zero(); - else if (args.size() == 3) from_index = args[2]; - else assert(false); + if(args.size()==2) + from_index=refined_string_typet::index_zero(); + else if(args.size()==3) + from_index=args[2]; + else + assert(false); if(refined_string_typet::is_java_string_type(c.type())) - { - string_exprt sub = add_axioms_for_string_expr(c); - return add_axioms_for_index_of_string(str,sub,from_index); - } + { + string_exprt sub=add_axioms_for_string_expr(c); + return add_axioms_for_index_of_string(str, sub, from_index); + } else - return add_axioms_for_index_of(str,typecast_exprt(c,get_char_type()),from_index); + return add_axioms_for_index_of(str, typecast_exprt(c, get_char_type()), + from_index); } exprt string_constraint_generatort::add_axioms_for_last_index_of (const string_exprt &str, const exprt & c, const exprt & from_index) { - symbol_exprt index = fresh_exist_index("last_index_of"); - symbol_exprt contains = fresh_boolean("contains_in_last_index_of"); + symbol_exprt index=fresh_exist_index("last_index_of"); + symbol_exprt contains=fresh_boolean("contains_in_last_index_of"); + + // We add axioms: + // a1 : -1 <= i <= from_index + // a2 : (i=-1 <=> !contains) + // a3 : (contains => i <= from_index && s[i]=c) + // a4 : forall n. i+1 <= n < from_index +1 && contains => s[n]!=c + // a5 : forall m. 0 <= m < from_index +1 && !contains => s[m]!=c + + exprt index1=refined_string_typet::index_of_int(1); + exprt minus1=refined_string_typet::index_of_int(-1); + exprt from_index_plus_one=plus_exprt(from_index, index1); + and_exprt a1(binary_relation_exprt(index, ID_ge, minus1), + binary_relation_exprt(index, ID_lt, from_index_plus_one)); + axioms.push_back(a1); - // -1 <= i <= from_index && (i = -1 <=> !contains) && (contains => i <= from_index && s[i] = c) - // && forall n. i <= n <= from_index => s[n] != c + equal_exprt a2(not_exprt(contains), equal_exprt(index, minus1)); + axioms.push_back(a2); - exprt from_index_plus_one = plus_exprt(from_index,refined_string_typet::index_of_int(1)); - axioms.push_back - (implies_exprt(equal_exprt(index,refined_string_typet::index_of_int(-1)), - and_exprt(not_exprt(contains), - and_exprt(binary_relation_exprt - (index,ID_ge,refined_string_typet::index_of_int(-1)), - binary_relation_exprt - (index,ID_lt,from_index_plus_one))))); - axioms.push_back(implies_exprt(not_exprt(contains),equal_exprt(index,refined_string_typet::index_of_int(-1)))); - axioms.push_back(implies_exprt(contains,and_exprt(is_positive(index),and_exprt(binary_relation_exprt(from_index,ID_ge,index),equal_exprt(str[index],c))))); + implies_exprt a3 + (contains, and_exprt(binary_relation_exprt(from_index, ID_ge, index), + equal_exprt(str[index], c))); + axioms.push_back(a3); - symbol_exprt n = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(n, plus_exprt(index,refined_string_typet::index_of_int(1)), from_index_plus_one, contains, not_exprt(equal_exprt(str[n],c)))); + symbol_exprt n=fresh_univ_index("QA_last_index_of"); + string_constraintt a4(n, plus_exprt(index, index1), + from_index_plus_one, contains, + not_exprt(equal_exprt(str[n], c))); + axioms.push_back(a4); - symbol_exprt m = fresh_univ_index("QA_last_index_of"); - axioms.push_back(string_constraintt(m, from_index_plus_one, not_exprt(contains),not_exprt(equal_exprt(str[m],c)))); + symbol_exprt m=fresh_univ_index("QA_last_index_of"); + string_constraintt a5(m, from_index_plus_one, not_exprt(contains), + not_exprt(equal_exprt(str[m], c))); + axioms.push_back(a5); return index; } exprt string_constraint_generatort::add_axioms_for_last_index_of -( const function_application_exprt &f) +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(f.type() == refined_string_typet::index_type()); - string_exprt str = add_axioms_for_string_expr(args[0]); - exprt c = args[1]; + const function_application_exprt::argumentst &args=f.arguments(); + assert(f.type()==refined_string_typet::index_type()); + string_exprt str=add_axioms_for_string_expr(args[0]); + exprt c=args[1]; exprt from_index; - if(args.size() == 2) - from_index = minus_exprt(str.length(),refined_string_typet::index_of_int(1)); - else if (args.size() == 3) - from_index = args[2]; - else assert(false); + if(args.size()==2) + from_index=minus_exprt(str.length(), refined_string_typet::index_of_int(1)); + else if(args.size()==3) + from_index=args[2]; + else + assert(false); if(refined_string_typet::is_java_string_type(c.type())) - { - string_exprt sub = add_axioms_for_string_expr(c); - return add_axioms_for_last_index_of_string(str,sub,from_index); - } + { + string_exprt sub=add_axioms_for_string_expr(c); + return add_axioms_for_last_index_of_string(str, sub, from_index); + } else - return add_axioms_for_last_index_of(str,typecast_exprt(c,get_char_type()),from_index); + return add_axioms_for_last_index_of + (str, typecast_exprt(c, get_char_type()), from_index); } exprt string_constraint_generatort::add_axioms_for_char_literal -( const function_application_exprt &f) +(const function_application_exprt &f) { - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 1); // there should be exactly 1 argument to char literal + const function_application_exprt::argumentst &args=f.arguments(); + assert(args.size()==1); // there should be exactly 1 argument to char literal - const exprt &arg = args[0]; - // for C programs argument to char literal should be one string constant of size one - if(arg.operands().size() == 1 && - arg.op0().operands().size() == 1 && - arg.op0().op0().operands().size() == 2 && - arg.op0().op0().op0().id() == ID_string_constant) + const exprt &arg=args[0]; + // for C programs argument to char literal should be one string constant + // of size 1. + if(arg.operands().size()==1 && + arg.op0().operands().size()==1 && + arg.op0().op0().operands().size()==2 && + arg.op0().op0().op0().id()==ID_string_constant) { - const string_constantt s = to_string_constant(arg.op0().op0().op0()); - irep_idt sval = s.get_value(); - assert(sval.size() == 1); + const string_constantt s=to_string_constant(arg.op0().op0().op0()); + irep_idt sval=s.get_value(); + assert(sval.size()==1); return from_integer(unsigned(sval[0]), get_char_type()); } else - { - throw "convert_char_literal unimplemented"; - } - + { + throw "convert_char_literal unimplemented"; + } } exprt string_constraint_generatort::add_axioms_for_char_at -( const function_application_exprt &f) +(const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); - symbol_exprt char_sym = string_exprt::fresh_symbol("char",get_char_type()); - axioms.push_back(equal_exprt(char_sym,str[args(f,2)[1]])); + string_exprt str=add_axioms_for_string_expr(args(f, 2)[0]); + symbol_exprt char_sym=string_exprt::fresh_symbol("char", get_char_type()); + axioms.push_back(equal_exprt(char_sym, str[args(f, 2)[1]])); return char_sym; } exprt string_constraint_generatort::add_axioms_for_parse_int (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); - typet type = f.type(); - symbol_exprt i = string_exprt::fresh_symbol("parsed_int",type); + string_exprt str=add_axioms_for_string_expr(args(f, 1)[0]); + typet type=f.type(); + symbol_exprt i=string_exprt::fresh_symbol("parsed_int", type); - exprt zero_char = constant_char('0'); - exprt minus_char = constant_char('-'); - exprt plus_char = constant_char('+'); - assert(type.id() == ID_signedbv); - exprt ten=from_integer(10,type); + exprt zero_char=constant_char('0'); + exprt minus_char=constant_char('-'); + exprt plus_char=constant_char('+'); + assert(type.id()==ID_signedbv); + exprt ten=from_integer(10, type); - exprt chr = str[0]; - exprt starts_with_minus = equal_exprt(chr,minus_char); - exprt starts_with_plus = equal_exprt(chr,plus_char); - exprt starts_with_digit = binary_relation_exprt(chr,ID_ge,zero_char); + exprt chr=str[0]; + exprt starts_with_minus=equal_exprt(chr, minus_char); + exprt starts_with_plus=equal_exprt(chr, plus_char); + exprt starts_with_digit=binary_relation_exprt(chr, ID_ge, zero_char); - for(unsigned size=1; size<=10;size++) + for(unsigned size=1; size<=10; size++) + { + exprt sum=from_integer(0, type); + exprt first_value=typecast_exprt(minus_exprt(chr, zero_char), type); + + for(unsigned j=1; j i=sum+first_value + // a2 : starts_with_plus => i=sum + // a3 : starts_with_minus => i=-sum + + equal_exprt premise=str.has_length(size); + implies_exprt a1(and_exprt(premise, starts_with_digit), + equal_exprt(i, plus_exprt(sum, first_value))); + axioms.push_back(a1); + + implies_exprt a2(and_exprt(premise, starts_with_plus), equal_exprt(i, sum)); + axioms.push_back(a2); + + implies_exprt a3(and_exprt(premise, starts_with_minus), + equal_exprt(i, unary_minus_exprt(sum))); + axioms.push_back(a3); + } return i; } @@ -1593,108 +1887,111 @@ exprt string_constraint_generatort::add_axioms_for_parse_int exprt string_constraint_generatort::is_high_surrogate(const exprt & chr) const { return and_exprt - (binary_relation_exprt(chr,ID_ge,constant_char(0xD800)), - binary_relation_exprt(chr,ID_le,constant_char(0xDBFF))); + (binary_relation_exprt(chr, ID_ge, constant_char(0xD800)), + binary_relation_exprt(chr, ID_le, constant_char(0xDBFF))); } exprt string_constraint_generatort::is_low_surrogate(const exprt & chr) const { return and_exprt - (binary_relation_exprt(chr,ID_ge,constant_char(0xDC00)), - binary_relation_exprt(chr,ID_le,constant_char(0xDFFF))); + (binary_relation_exprt(chr, ID_ge, constant_char(0xDC00)), + binary_relation_exprt(chr, ID_le, constant_char(0xDFFF))); +} + +// pair_value=0x10000+(((char1%0x0800)*0x0400)+char2%0x0400) +// char1 and char2 should be of type return_type +exprt pair_value(exprt char1, exprt char2, typet return_type) +{ + exprt hex010000=from_integer(0x010000, return_type); + exprt hex0800=from_integer(0x0800, return_type); + exprt hex0400=from_integer(0x0400, return_type); + mult_exprt m1(mod_exprt(char1, hex0800), hex0400); + mod_exprt m2(char2, hex0400); + plus_exprt pair_value(hex010000, plus_exprt(m1, m2)); + return pair_value; } exprt string_constraint_generatort::add_axioms_for_code_point_at -( const function_application_exprt &f) -{ - typet return_type = f.type(); - string_exprt str = add_axioms_for_string_expr(args(f,2)[0]); - exprt pos = args(f,2)[1]; - symbol_exprt result = string_exprt::fresh_symbol("char",return_type); - assert(return_type.id() == ID_signedbv); - size_t width = to_bitvector_type(return_type).get_width(); - - exprt char1_as_int = typecast_exprt(str[pos],return_type); - exprt char2_as_int = typecast_exprt(str[plus_exprt(pos,refined_string_typet::index_of_int(1))],return_type); - - exprt pair_value = - plus_exprt - (from_integer(0x010000,signedbv_typet(width)), - (plus_exprt - (mult_exprt - (mod_exprt(char1_as_int,from_integer(0x0800,signedbv_typet(width))), - from_integer(0x0400,signedbv_typet(width))), - mod_exprt(char2_as_int,from_integer(0x0400,signedbv_typet(width)))))); - - exprt return_pair = and_exprt(is_high_surrogate(str[pos]), - is_low_surrogate(str[plus_exprt(pos,refined_string_typet::index_of_int(1))])); - - axioms.push_back(implies_exprt(return_pair,equal_exprt(result,pair_value))); - axioms.push_back(implies_exprt(not_exprt(return_pair), equal_exprt(result,char1_as_int))); +(const function_application_exprt &f) +{ + typet return_type=f.type(); + assert(return_type.id()==ID_signedbv); + string_exprt str=add_axioms_for_string_expr(args(f, 2)[0]); + exprt pos=args(f, 2)[1]; + + symbol_exprt result=string_exprt::fresh_symbol("char", return_type); + exprt index1=refined_string_typet::index_of_int(1); + exprt char1=str[pos]; + exprt char2=str[plus_exprt(pos, index1)]; + exprt char1_as_int=typecast_exprt(char1, return_type); + exprt char2_as_int=typecast_exprt(char2, return_type); + exprt pair=pair_value(char1_as_int, char2_as_int, return_type); + exprt is_low=is_low_surrogate(str[plus_exprt(pos, index1)]); + exprt return_pair=and_exprt(is_high_surrogate(str[pos]), is_low); + + axioms.push_back(implies_exprt(return_pair, equal_exprt(result, pair))); + axioms.push_back(implies_exprt(not_exprt(return_pair), + equal_exprt(result, char1_as_int))); return result; } exprt string_constraint_generatort::add_axioms_for_code_point_before -( const function_application_exprt &f) -{ - const function_application_exprt::argumentst &args = f.arguments(); - assert(args.size() == 2); - typet return_type = f.type(); - symbol_exprt result = string_exprt::fresh_symbol("char",return_type); - string_exprt str = add_axioms_for_string_expr(args[0]); - - exprt char1 = str[minus_exprt(args[1],refined_string_typet::index_of_int(2))]; - exprt char1_as_int = typecast_exprt(char1,return_type); - exprt char2 = str[minus_exprt(args[1],refined_string_typet::index_of_int(1))]; - exprt char2_as_int = typecast_exprt(char2,return_type); - - assert(return_type.id() == ID_signedbv); - size_t width = to_bitvector_type(return_type).get_width(); - - exprt pair_value = - plus_exprt - (from_integer(0x010000,signedbv_typet(width)), - (plus_exprt - (mult_exprt - (mod_exprt(char1_as_int,from_integer(0x0800,signedbv_typet(width))), - from_integer(0x0400,signedbv_typet(width))), - mod_exprt(char2_as_int,from_integer(0x0400,signedbv_typet(width)))))); - - exprt return_pair = and_exprt(is_high_surrogate(char1),is_low_surrogate(char2)); - - axioms.push_back(implies_exprt(return_pair,equal_exprt(result,pair_value))); +(const function_application_exprt &f) +{ + const function_application_exprt::argumentst &args=f.arguments(); + assert(args.size()==2); + typet return_type=f.type(); + assert(return_type.id()==ID_signedbv); + symbol_exprt result=string_exprt::fresh_symbol("char", return_type); + string_exprt str=add_axioms_for_string_expr(args[0]); + + exprt char1=str[minus_exprt(args[1], refined_string_typet::index_of_int(2))]; + exprt char2=str[minus_exprt(args[1], refined_string_typet::index_of_int(1))]; + exprt char1_as_int=typecast_exprt(char1, return_type); + exprt char2_as_int=typecast_exprt(char2, return_type); + + exprt pair=pair_value(char1_as_int, char2_as_int, return_type); + exprt return_pair= + and_exprt(is_high_surrogate(char1), is_low_surrogate(char2)); + + axioms.push_back(implies_exprt(return_pair, equal_exprt(result, pair))); axioms.push_back(implies_exprt(not_exprt(return_pair), - equal_exprt(result,char2_as_int))); + equal_exprt(result, char2_as_int))); return result; } exprt string_constraint_generatort::add_axioms_for_code_point_count -( const function_application_exprt &f) +(const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - exprt begin = args(f,3)[1]; - exprt end = args(f,3)[2]; - typet return_type = f.type(); - symbol_exprt result = string_exprt::fresh_symbol("code_point_count",return_type); - exprt length = minus_exprt(end,begin); - axioms.push_back(binary_relation_exprt(result,ID_le,length)); - axioms.push_back(binary_relation_exprt(result,ID_ge,div_exprt(length,refined_string_typet::index_of_int(2)))); + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + exprt begin=args(f, 3)[1]; + exprt end=args(f, 3)[2]; + typet return_type=f.type(); + symbol_exprt result= + string_exprt::fresh_symbol("code_point_count", return_type); + + exprt length=minus_exprt(end, begin); + exprt minimum=div_exprt(length, refined_string_typet::index_of_int(2)); + axioms.push_back(binary_relation_exprt(result, ID_le, length)); + axioms.push_back(binary_relation_exprt(result, ID_ge, minimum)); return result; } exprt string_constraint_generatort::add_axioms_for_offset_by_code_point -( const function_application_exprt &f) -{ - string_exprt str = add_axioms_for_string_expr(args(f,3)[0]); - exprt index = args(f,3)[1]; - exprt offset = args(f,3)[2]; - typet return_type = f.type(); - symbol_exprt result = string_exprt::fresh_symbol("offset_by_code_point",return_type); - exprt minimum = plus_exprt(index,plus_exprt(index,offset)); - exprt maximum = plus_exprt(index,plus_exprt(index,mult_exprt(offset,refined_string_typet::index_of_int(2)))); - axioms.push_back(binary_relation_exprt(result,ID_le,maximum)); - axioms.push_back(binary_relation_exprt(result,ID_ge,minimum)); +(const function_application_exprt &f) +{ + string_exprt str=add_axioms_for_string_expr(args(f, 3)[0]); + exprt index=args(f, 3)[1]; + exprt offset=args(f, 3)[2]; + typet return_type=f.type(); + symbol_exprt result= + string_exprt::fresh_symbol("offset_by_code_point", return_type); + + exprt minimum=plus_exprt(index, offset); + exprt maximum=plus_exprt(index, plus_exprt(offset, offset)); + axioms.push_back(binary_relation_exprt(result, ID_le, maximum)); + axioms.push_back(binary_relation_exprt(result, ID_ge, minimum)); return result; } @@ -1703,7 +2000,7 @@ exprt string_constraint_generatort::add_axioms_for_offset_by_code_point exprt string_constraint_generatort::add_axioms_for_to_char_array (const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); + string_exprt str=add_axioms_for_string_expr(args(f, 1)[0]); return str.content(); } @@ -1711,96 +2008,100 @@ exprt string_constraint_generatort::add_axioms_for_to_char_array exprt string_constraint_generatort::add_axioms_for_compare_to (const function_application_exprt &f) { - string_exprt s1 = add_axioms_for_string_expr(args(f,2)[0]); - string_exprt s2 = add_axioms_for_string_expr(args(f,2)[1]); - typet return_type = f.type(); - symbol_exprt res = string_exprt::fresh_symbol("compare_to",return_type); - - // In the lexicographic comparison, x is the first point where the two strings differ. - // res == 0 => |s1| = |s2| && forall i < |s1|. s1[i] == s2[i] - // res != 0 => - // (|s1| <= |s2| && exists x < |s1|. res = s1[x] - s2[x] && forall i= |s2| && exists x < |s2|. res = s1[x] - s2[x] && forall i |s2| && res = |s1| - |s2| && forall i<|s2| s1[i]=s2[i]) - - // The second part can be rewriten as: - // exists x. - // res != 0 ==> x> 0 && - // ((|s1| <= |s2| && x < |s1|) || (|s1| >= |s2| && x < |s2|) && res = s1[x] - s2[x] ) - // || (|s1| < |s2| && x = |s1|) || (|s1| > |s2| && x = |s2|) && res = |s1| - |s2| - // && forall i < x. res != 0 => s1[i] = s2[i] - - assert(return_type.id() == ID_signedbv); - - symbol_exprt i = fresh_univ_index("QA_compare_to"); - equal_exprt res_null = equal_exprt(res,from_integer(0,return_type)); - axioms.push_back(implies_exprt(res_null, s1.same_length(s2))); - axioms.push_back(string_constraintt - (i,s1.length(),res_null,equal_exprt(s1[i],s2[i]))); - - symbol_exprt x = fresh_exist_index("index_compare_to"); - axioms.push_back - (implies_exprt - (not_exprt(res_null), - and_exprt - (binary_relation_exprt(x,ID_ge,from_integer(0,return_type)), - or_exprt - (and_exprt - (equal_exprt(res,typecast_exprt(minus_exprt(s1[x],s2[x]),return_type)), - or_exprt - (and_exprt(s1.shorter(s2),s1.strictly_longer(x)), - and_exprt(s1.longer(s2),s2.strictly_longer(x)))), - and_exprt - (equal_exprt(res,typecast_exprt(minus_exprt(s1.length(),s2.length()), - return_type)), - or_exprt - (and_exprt(s2.strictly_longer(s1),s1.has_length(x)), - and_exprt(s1.strictly_longer(s2),s2.has_length(x)))))))); - - axioms.push_back(string_constraintt - (i, x, not_exprt(res_null),equal_exprt(s1[i],s2[i]))); + string_exprt s1=add_axioms_for_string_expr(args(f, 2)[0]); + string_exprt s2=add_axioms_for_string_expr(args(f, 2)[1]); + typet return_type=f.type(); + symbol_exprt res=string_exprt::fresh_symbol("compare_to", return_type); + + // In the lexicographic comparison, x is the first point where the two + // strings differ. + // We add axioms: + // a1 : res==0 => |s1|=|s2| + // a2 : forall i<|s1|. s1[i]==s2[i] + // a3 : exists x. + // res!=0 ==> x> 0 && + // ((|s1| <= |s2| && x<|s1|) || (|s1| >= |s2| && x<|s2|) + // && res=s1[x]-s2[x] ) + // || cond2: + // (|s1|<|s2| && x=|s1|) || (|s1| > |s2| && x=|s2|) && res=|s1|-|s2|) + // a4 : forall i s1[i]=s2[i] + + assert(return_type.id()==ID_signedbv); + + equal_exprt res_null=equal_exprt(res, from_integer(0, return_type)); + implies_exprt a1(res_null, s1.same_length(s2)); + axioms.push_back(a1); + + symbol_exprt i=fresh_univ_index("QA_compare_to"); + string_constraintt a2(i, s1.length(), res_null, equal_exprt(s1[i], s2[i])); + axioms.push_back(a2); + + symbol_exprt x=fresh_exist_index("index_compare_to"); + equal_exprt ret_char_diff + (res, typecast_exprt(minus_exprt(s1[x], s2[x]), return_type)); + equal_exprt ret_length_diff + (res, typecast_exprt(minus_exprt(s1.length(), s2.length()), return_type)); + or_exprt guard1(and_exprt(s1.shorter(s2), s1.strictly_longer(x)), + and_exprt(s1.longer(s2), s2.strictly_longer(x))); + and_exprt cond1(ret_char_diff, guard1); + or_exprt guard2(and_exprt(s2.strictly_longer(s1), s1.has_length(x)), + and_exprt(s1.strictly_longer(s2), s2.has_length(x))); + and_exprt cond2(ret_length_diff, guard2); + + implies_exprt a3 + (not_exprt(res_null), + and_exprt(binary_relation_exprt(x, ID_ge, from_integer(0, return_type)), + or_exprt(cond1, cond2))); + axioms.push_back(a3); + + string_constraintt a4(i, x, not_exprt(res_null), equal_exprt(s1[i], s2[i])); + axioms.push_back(a4); return res; } -symbol_exprt string_constraint_generatort::add_axioms_for_intern(const function_application_exprt &f) +symbol_exprt string_constraint_generatort::add_axioms_for_intern +(const function_application_exprt &f) { - string_exprt str = add_axioms_for_string_expr(args(f,1)[0]); - typet return_type = f.type(); + string_exprt str=add_axioms_for_string_expr(args(f, 1)[0]); + typet return_type=f.type(); // initialisation of the missing pool variable std::map::iterator it; - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(pool.find(it->second) == pool.end()) - pool[it->second] = string_exprt::fresh_symbol("pool", return_type); + for(it=symbol_to_string.begin(); it!=symbol_to_string.end(); it++) + if(pool.find(it->second)==pool.end()) + pool[it->second]=string_exprt::fresh_symbol("pool", return_type); - // intern(str) = s_0 || s_1 || ... + // intern(str)=s_0 || s_1 || ... // for each string s. - // intern(str) = intern(s) || |str| != |s| || (|str| == |s| && exists i < |s|. s[i] != str[i]) + // intern(str)=intern(s) || |str|!=|s| + // || (|str|==|s| && exists i<|s|. s[i]!=str[i]) - //symbol_exprt intern = string_exprt::fresh_symbol("intern",return_type); + // symbol_exprt intern=string_exprt::fresh_symbol("intern",return_type); - exprt disj = false_exprt(); - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - disj = or_exprt(disj, equal_exprt(pool[str], symbol_exprt(it->first,return_type))); + exprt disj=false_exprt(); + for(it=symbol_to_string.begin(); it!=symbol_to_string.end(); it++) + disj=or_exprt + (disj, equal_exprt(pool[str], symbol_exprt(it->first, return_type))); axioms.push_back(disj); // WARNING: the specification may be incomplete or incorrect - for(it = symbol_to_string.begin(); it != symbol_to_string.end(); it++) - if(it->second != str) { - symbol_exprt i = fresh_exist_index("index_intern"); + for(it=symbol_to_string.begin(); it!=symbol_to_string.end(); it++) + if(it->second!=str) + { + symbol_exprt i=fresh_exist_index("index_intern"); axioms.push_back - (or_exprt - (equal_exprt(pool[it->second],pool[str]), - or_exprt - (not_exprt(str.same_length(it->second)), - and_exprt(str.same_length(it->second), - and_exprt(not_exprt(equal_exprt(str[i],it->second[i])), - and_exprt(str.strictly_longer(i),is_positive(i) - )))))); + (or_exprt + (equal_exprt(pool[it->second], pool[str]), + or_exprt + (not_exprt(str.same_length(it->second)), + and_exprt + (str.same_length(it->second), + and_exprt + (not_exprt(equal_exprt(str[i], it->second[i])), + and_exprt(str.strictly_longer(i), is_positive(i))))))); } @@ -1808,10 +2109,11 @@ symbol_exprt string_constraint_generatort::add_axioms_for_intern(const function_ } -void string_constraint_generatort::set_string_symbol_equal_to_expr(const symbol_exprt & sym, const exprt & str) +void string_constraint_generatort::set_string_symbol_equal_to_expr +(const symbol_exprt & sym, const exprt & str) { if(str.id()==ID_symbol) - assign_to_symbol(sym,find_or_add_string_of_symbol(to_symbol_expr(str))); + assign_to_symbol(sym, find_or_add_string_of_symbol(to_symbol_expr(str))); else - assign_to_symbol(sym,add_axioms_for_string_expr(str)); + assign_to_symbol(sym, add_axioms_for_string_expr(str)); } diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index 28e5b1daed3..ec9af1d3a97 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -7,26 +7,28 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ -#ifndef CPROVER_SOLVER_STRING_CONSTRAINT_GENERATOR_H -#define CPROVER_SOLVER_STRING_CONSTRAINT_GENERATOR_H +#ifndef CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_GENERATOR_H +#define CPROVER_SOLVERS_REFINEMENT_STRING_CONSTRAINT_GENERATOR_H #include -class string_constraint_generatort { +class string_constraint_generatort +{ public: - - string_constraint_generatort() : mode(ID_unknown) { } + string_constraint_generatort(): mode(ID_unknown) { } void set_mode(irep_idt _mode) { - assert((_mode==ID_java)||(_mode==ID_C)); // only C and java modes supported + // only C and java modes supported + assert((_mode==ID_java) || (_mode==ID_C)); mode=_mode; } inline irep_idt &get_mode() { return mode; } unsignedbv_typet get_char_type() const; - inline signedbv_typet get_index_type() const {return refined_string_typet::index_type();}; + inline signedbv_typet get_index_type() const + { return refined_string_typet::index_type(); } // Axioms are of three kinds: universally quantified string constraint, // not contains string constraints and simple formulas. @@ -39,9 +41,9 @@ class string_constraint_generatort { std::vector index_symbols; // Used to store information about witnesses for not_contains constraints - std::map witness; + std::map witness; - // + // inline exprt get_witness_of (const string_not_contains_constraintt & c, const exprt & univ_val) const { return index_exprt(witness.at(c), univ_val); } @@ -50,12 +52,15 @@ class string_constraint_generatort { symbol_exprt fresh_univ_index(const irep_idt &prefix); symbol_exprt fresh_boolean(const irep_idt &prefix); - // We maintain a map from symbols to strings. If a symbol is not yet present we will create a new one with the correct type depending on whether this is a java or c string + // We maintain a map from symbols to strings. std::map symbol_to_string; + // If a symbol is not yet present we will create a new one with + // the correct type depending on whether the mode is java or c string_exprt find_or_add_string_of_symbol(const symbol_exprt & sym); - inline void assign_to_symbol(const symbol_exprt & sym, const string_exprt & expr) + inline void assign_to_symbol + (const symbol_exprt & sym, const string_exprt & expr) { symbol_to_string[sym.get_identifier()]= expr; } @@ -64,15 +69,16 @@ class string_constraint_generatort { // string_exprt create_string_equal_to_expr(const exprt & unrefined_string); string_exprt add_axioms_for_string_expr(const exprt & expr); - void set_string_symbol_equal_to_expr(const symbol_exprt & sym, const exprt & str); + void set_string_symbol_equal_to_expr + (const symbol_exprt & sym, const exprt & str); // The following functions convert different string functions // and add the corresponding lemmas to a list of properties to be checked - exprt add_axioms_for_function_application(const function_application_exprt &expr); + exprt add_axioms_for_function_application + (const function_application_exprt &expr); private: - // The following functions add axioms for the returned value // to be equal to the result of the function given as argument exprt add_axioms_for_char_at(const function_application_exprt &f); @@ -84,41 +90,56 @@ class string_constraint_generatort { exprt add_axioms_for_data(const function_application_exprt &f); exprt add_axioms_for_hash_code(const function_application_exprt &f); exprt add_axioms_for_is_empty(const function_application_exprt &f); - exprt add_axioms_for_is_prefix(const string_exprt &prefix, const string_exprt &str, const exprt & offset); - exprt add_axioms_for_is_prefix(const function_application_exprt &f, bool swap_arguments=false); - exprt add_axioms_for_is_suffix(const function_application_exprt &f, bool swap_arguments=false); + exprt add_axioms_for_is_prefix + (const string_exprt &prefix, const string_exprt &str, const exprt & offset); + exprt add_axioms_for_is_prefix + (const function_application_exprt &f, bool swap_arguments=false); + exprt add_axioms_for_is_suffix + (const function_application_exprt &f, bool swap_arguments=false); exprt add_axioms_for_length(const function_application_exprt &f); string_exprt add_axioms_for_empty_string(const function_application_exprt &f); string_exprt add_axioms_for_char_set(const function_application_exprt &expr); string_exprt add_axioms_for_copy(const function_application_exprt &f); - string_exprt add_axioms_for_concat(const string_exprt & s1, const string_exprt & s2); + string_exprt add_axioms_for_concat + (const string_exprt & s1, const string_exprt & s2); string_exprt add_axioms_for_concat(const function_application_exprt &f); string_exprt add_axioms_for_concat_int(const function_application_exprt &f); string_exprt add_axioms_for_concat_long(const function_application_exprt &f); string_exprt add_axioms_for_concat_bool(const function_application_exprt &f); string_exprt add_axioms_for_concat_char(const function_application_exprt &f); - string_exprt add_axioms_for_concat_double(const function_application_exprt &f); + string_exprt add_axioms_for_concat_double + (const function_application_exprt &f); string_exprt add_axioms_for_concat_float(const function_application_exprt &f); - string_exprt add_axioms_for_concat_code_point(const function_application_exprt &f); - string_exprt add_axioms_for_constant(irep_idt sval, int char_width, unsignedbv_typet char_type); - string_exprt add_axioms_for_delete (const string_exprt &str, const exprt & start, const exprt & end); + string_exprt add_axioms_for_concat_code_point + (const function_application_exprt &f); + string_exprt add_axioms_for_constant + (irep_idt sval, int char_width, unsignedbv_typet char_type); + string_exprt add_axioms_for_constant + (irep_idt sval); + string_exprt add_axioms_for_delete + (const string_exprt &str, const exprt & start, const exprt & end); string_exprt add_axioms_for_delete(const function_application_exprt &expr); - string_exprt add_axioms_for_delete_char_at(const function_application_exprt &expr); + string_exprt add_axioms_for_delete_char_at + (const function_application_exprt &expr); - string_exprt add_axioms_for_insert(const string_exprt & s1, const string_exprt & s2, const exprt &offset); + string_exprt add_axioms_for_insert + (const string_exprt & s1, const string_exprt & s2, const exprt &offset); string_exprt add_axioms_for_insert(const function_application_exprt &f); string_exprt add_axioms_for_insert_int(const function_application_exprt &f); string_exprt add_axioms_for_insert_long(const function_application_exprt &f); string_exprt add_axioms_for_insert_bool(const function_application_exprt &f); string_exprt add_axioms_for_insert_char(const function_application_exprt &f); - string_exprt add_axioms_for_insert_double(const function_application_exprt &f); + string_exprt add_axioms_for_insert_double + (const function_application_exprt &f); string_exprt add_axioms_for_insert_float(const function_application_exprt &f); - string_exprt add_axioms_for_insert_char_array(const function_application_exprt &f); + string_exprt add_axioms_for_insert_char_array + (const function_application_exprt &f); - // Add axioms for conversion to string + // Add axioms for conversion to string string_exprt add_axioms_from_literal(const function_application_exprt &f); string_exprt add_axioms_from_int(const function_application_exprt &f); + // warning: This may only be correct for max_size=10 string_exprt add_axioms_from_int(const exprt &i, size_t max_size); string_exprt add_axioms_from_int_hex(const exprt &i); string_exprt add_axioms_from_int_hex(const function_application_exprt &f); @@ -129,31 +150,59 @@ class string_constraint_generatort { string_exprt add_axioms_from_char(const function_application_exprt &f); string_exprt add_axioms_from_char(const exprt &i); string_exprt add_axioms_from_char_array(const function_application_exprt &f); - string_exprt add_axioms_from_char_array - (const exprt & length, const exprt & data, const exprt & offset, const exprt & count); + string_exprt add_axioms_from_char_array( + const exprt & length, + const exprt & data, + const exprt & offset, + const exprt & count); + + // Warning: the specifications are only partial for some of the + // `index_of` functions + exprt add_axioms_for_index_of( + const string_exprt &str, + const exprt & c, + const exprt & from_index); + + exprt add_axioms_for_index_of_string( + const string_exprt &str, + const string_exprt & substring, + const exprt & from_index); - // Warning: the specifications are only partial for some of the "index_of" functions - exprt add_axioms_for_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); - exprt add_axioms_for_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); exprt add_axioms_for_index_of(const function_application_exprt &f); - exprt add_axioms_for_last_index_of_string(const string_exprt &str, const string_exprt & substring, const exprt & from_index); - exprt add_axioms_for_last_index_of(const string_exprt &str, const exprt & c, const exprt & from_index); + + exprt add_axioms_for_last_index_of_string( + const string_exprt &str, + const string_exprt & substring, + const exprt & from_index); + + exprt add_axioms_for_last_index_of( + const string_exprt &str, + const exprt & c, + const exprt & from_index); + exprt add_axioms_for_last_index_of(const function_application_exprt &f); // Warning: the specifications of these functions is only partial: string_exprt add_axioms_from_float(const function_application_exprt &f); - string_exprt add_axioms_from_float(const exprt &f, bool double_precision=false); + string_exprt add_axioms_from_float( + const exprt &f, + bool double_precision=false); + string_exprt add_axioms_from_double(const function_application_exprt &f); string_exprt add_axioms_for_replace(const function_application_exprt &f); string_exprt add_axioms_for_set_length(const function_application_exprt &f); - // Warning: the specification may not be correct for the case where the string is not long enough - string_exprt add_axioms_for_substring(const string_exprt & str, const exprt & start, const exprt & end); + // Warning: the specification may not be correct for the + // case where the string is not long enough + string_exprt add_axioms_for_substring + (const string_exprt & str, const exprt & start, const exprt & end); string_exprt add_axioms_for_substring(const function_application_exprt &expr); - string_exprt add_axioms_for_to_lower_case(const function_application_exprt &expr); - string_exprt add_axioms_for_to_upper_case(const function_application_exprt &expr); + string_exprt add_axioms_for_to_lower_case + (const function_application_exprt &expr); + string_exprt add_axioms_for_to_upper_case + (const function_application_exprt &expr); string_exprt add_axioms_for_trim(const function_application_exprt &expr); // Warning: not working correctly at the moment @@ -169,24 +218,30 @@ class string_constraint_generatort { // Warning: this function is underspecified exprt add_axioms_for_code_point_count(const function_application_exprt &f); // Warning: this function is underspecified - exprt add_axioms_for_offset_by_code_point(const function_application_exprt &f); + // shoudl return the index within this String that is offset from the given + // first argument by second argument code points. + // We approximate this by saying the result is + // between index + offset and index + 2 * offset + exprt add_axioms_for_offset_by_code_point + (const function_application_exprt &f); exprt add_axioms_for_parse_int(const function_application_exprt &f); exprt add_axioms_for_to_char_array(const function_application_exprt &f); exprt add_axioms_for_compare_to(const function_application_exprt &f); - // Warning: this does not work at the moment because of the way we treat string pointers + // Warning: this does not work at the moment because of the way we treat + // string pointers symbol_exprt add_axioms_for_intern(const function_application_exprt &f); - // Which language shoud be used irep_idt mode; // assert that the number of argument is equal to nb and extract them - inline static function_application_exprt::argumentst args(const function_application_exprt &expr, size_t nb) + inline static function_application_exprt::argumentst args + (const function_application_exprt &expr, size_t nb) { function_application_exprt::argumentst args = expr.arguments(); - assert(args.size() == nb); + assert(args.size()==nb); return args; } @@ -200,7 +255,6 @@ class string_constraint_generatort { std::map pool; // Used to determine whether hashcode should be equal std::map hash; - }; #endif diff --git a/src/solvers/refinement/string_expr.cpp b/src/solvers/refinement/string_expr.cpp index 263f06a6838..52f6c651222 100644 --- a/src/solvers/refinement/string_expr.cpp +++ b/src/solvers/refinement/string_expr.cpp @@ -25,9 +25,10 @@ string_exprt::string_exprt(unsignedbv_typet char_type) : struct_exprt(refined_string_typet(char_type)) { refined_string_typet t(char_type); - symbol_exprt length = fresh_symbol("string_length",refined_string_typet::index_type()); - symbol_exprt content = fresh_symbol("string_content",t.get_content_type()); - move_to_operands(length,content); + symbol_exprt length= + fresh_symbol("string_length", refined_string_typet::index_type()); + symbol_exprt content=fresh_symbol("string_content", t.get_content_type()); + move_to_operands(length, content); } diff --git a/src/solvers/refinement/string_expr.h b/src/solvers/refinement/string_expr.h index f5fb3c05221..ec63349d5d8 100644 --- a/src/solvers/refinement/string_expr.h +++ b/src/solvers/refinement/string_expr.h @@ -7,8 +7,8 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ -#ifndef CPROVER_SOLVER_STRING_EXPR_H -#define CPROVER_SOLVER_STRING_EXPR_H +#ifndef CPROVER_SOLVERS_REFINEMENT_STRING_EXPR_H +#define CPROVER_SOLVERS_REFINEMENT_STRING_EXPR_H #include @@ -18,24 +18,26 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com // Expressions that encode strings -class string_exprt : public struct_exprt { +class string_exprt: public struct_exprt +{ public: - // Initialize string from the type of characters - string_exprt(unsignedbv_typet char_type); + explicit string_exprt(unsignedbv_typet char_type); // Default uses C character type - string_exprt() : string_exprt(refined_string_typet::char_type()) {}; + string_exprt() : string_exprt(refined_string_typet::char_type()) {} // Generate a new symbol of the given type tp with a prefix - static symbol_exprt fresh_symbol(const irep_idt &prefix, - const typet &tp=bool_typet()); + static symbol_exprt fresh_symbol + (const irep_idt &prefix, const typet &tp=bool_typet()); // Expression corresponding to the length of the string - inline const exprt & length() const { return op0();}; + inline const exprt & length() const + { return op0(); } // Expression corresponding to the content (array of characters) of the string - inline const exprt & content() const { return op1();}; + inline const exprt & content() const + { return op1(); } static exprt within_bounds(const exprt & idx, const exprt & bound); @@ -48,29 +50,29 @@ class string_exprt : public struct_exprt { // Comparison on the length of the strings inline binary_relation_exprt longer(const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs.length()); } - inline binary_relation_exprt longer (const exprt & rhs) const + inline binary_relation_exprt longer(const exprt & rhs) const { return binary_relation_exprt(length(), ID_ge, rhs); } - inline binary_relation_exprt strictly_longer (const exprt & rhs) const + inline binary_relation_exprt strictly_longer(const exprt & rhs) const { return binary_relation_exprt(rhs, ID_lt, length()); } - inline binary_relation_exprt strictly_longer (const string_exprt & rhs) const + inline binary_relation_exprt strictly_longer(const string_exprt & rhs) const { return binary_relation_exprt(rhs.length(), ID_lt, length()); } - inline binary_relation_exprt strictly_longer (int i) const + inline binary_relation_exprt strictly_longer(int i) const { return strictly_longer(refined_string_typet::index_of_int(i)); } - inline binary_relation_exprt shorter (const string_exprt & rhs) const + inline binary_relation_exprt shorter(const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs.length()); } - inline binary_relation_exprt shorter (const exprt & rhs) const + inline binary_relation_exprt shorter(const exprt & rhs) const { return binary_relation_exprt(length(), ID_le, rhs); } - inline binary_relation_exprt shorter (int i) const + inline binary_relation_exprt shorter(int i) const { return shorter(refined_string_typet::index_of_int(i)); } - inline binary_relation_exprt strictly_shorter (const string_exprt & rhs) const + inline binary_relation_exprt strictly_shorter(const string_exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs.length()); } - inline binary_relation_exprt strictly_shorter (const exprt & rhs) const + inline binary_relation_exprt strictly_shorter(const exprt & rhs) const { return binary_relation_exprt(length(), ID_lt, rhs); } - inline equal_exprt same_length (const string_exprt & rhs) const + inline equal_exprt same_length(const string_exprt & rhs) const { return equal_exprt(length(), rhs.length()); } - inline equal_exprt has_length (const exprt & rhs) const + inline equal_exprt has_length(const exprt & rhs) const { return equal_exprt(length(), rhs); } - inline equal_exprt has_length (int i) const + inline equal_exprt has_length(int i) const { return has_length(refined_string_typet::index_of_int(i)); } static irep_idt extract_java_string(const symbol_exprt & s); @@ -78,11 +80,11 @@ class string_exprt : public struct_exprt { static unsigned next_symbol_id; friend inline string_exprt &to_string_expr(exprt &expr); - }; -extern inline string_exprt &to_string_expr(exprt &expr){ +inline string_exprt &to_string_expr(exprt &expr) +{ assert(expr.id()==ID_struct); return static_cast(expr); } diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index 165629f282d..aaf1964b2e1 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -1,11 +1,11 @@ /** -*- C++ -*- *****************************************************\ -Module: String support via axiom instantiation - (see the PASS paper at HVC'13) + Module: String support via axiom instantiation + (see the PASS paper at HVC'13) -Author: Alberto Griggio, alberto.griggio@gmail.com + Author: Alberto Griggio, alberto.griggio@gmail.com -\*******************************************************************/ + \*******************************************************************/ #include #include @@ -16,34 +16,32 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): - SUB(_ns, _prop) + supert(_ns, _prop) { - use_counter_example = false; - //use_counter_example = true; - variable_with_multiple_occurence_in_index = false; - initial_loop_bound = 100; - start_time = std::chrono::high_resolution_clock::now(); + use_counter_example=false; + variable_with_multiple_occurence_in_index=false; + initial_loop_bound=100; } void string_refinementt::set_mode() { debug() << "initializing mode" << eom; // symbol_table.show(std::cout); - symbolt init = ns.lookup(irep_idt("__CPROVER_initialize")); - irep_idt mode = init.mode; + symbolt init=ns.lookup(irep_idt("__CPROVER_initialize")); + irep_idt mode=init.mode; debug() << "mode detected as " << mode << eom; generator.set_mode(mode); } -void string_refinementt::display_index_set() { - for (std::map::iterator i = index_set.begin(), - end = index_set.end(); i != end; ++i) { - const exprt &s = i->first; - debug() << "IS(" << from_expr(s) << ") == {"; +void string_refinementt::display_index_set() +{ + for(auto i : index_set) + { + const exprt &s=i.first; + debug() << "IS(" << from_expr(s) << ")=={"; - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) - debug() << from_expr(*j) << "; "; + for(auto j : i.second) + debug() << from_expr(j) << "; "; debug() << "}" << eom; } } @@ -53,26 +51,26 @@ void string_refinementt::display_index_set() { void string_refinementt::add_instantiations() { debug() << "string_constraint_generatort::add_instantiations: " - << "going through the current index set:" << eom; - for (std::map::iterator i = current_index_set.begin(), - end = current_index_set.end(); i != end; ++i) { - const exprt &s = i->first; - debug() << "IS(" << from_expr(s) << ") == {"; - - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) - debug() << from_expr(*j) << "; "; - debug() << "}" << eom; + << "going through the current index set:" << eom; + for(std::map::iterator i=current_index_set.begin(), + end=current_index_set.end(); i!=end; i++) + { + const exprt &s=i->first; + debug() << "IS(" << from_expr(s) << ")=={"; + for(auto j : i->second) + debug() << from_expr(j) << "; "; + debug() << "}" << eom; - for (expr_sett::const_iterator j = i->second.begin(), end = i->second.end(); - j != end; ++j) { - const exprt &val = *j; + for(auto j : i->second) + { + const exprt &val=j; - for (size_t k = 0; k < universal_axioms.size(); ++k) { - assert(universal_axioms[k].is_univ_quant()); - exprt lemma = instantiate(universal_axioms[k], s, val); - add_lemma(lemma); + for(std::size_t k=0; k - (std::chrono::high_resolution_clock::now()-start_time).count() / 1000) - << eom; -} - decision_proceduret::resultt string_refinementt::dec_solve() { - print_time("string_refinementt::dec_solve"); - for(unsigned i = 0; i < generator.axioms.size(); i++) - if(generator.axioms[i].id() == ID_string_constraint) + for(std::size_t i=0; i 0) + while((initial_loop_bound--)>0) + { + decision_proceduret::resultt res=supert::dec_solve(); + + switch(res) { + case D_SATISFIABLE: + if(!check_axioms()) + { + debug() << "check_SAT: got SAT but the model is not correct" << eom; + } + else + { + debug() << "check_SAT: the model is correct" << eom; + return D_SATISFIABLE; + } - print_time("string_refinementt::dec_solve"); - decision_proceduret::resultt res = SUB::dec_solve(); - - switch(res) - { - case D_SATISFIABLE: - if(!check_axioms()) { - debug() << "check_SAT: got SAT but the model is not correct" << eom; - } - else { - debug() << "check_SAT: the model is correct" << eom; - return D_SATISFIABLE; - } - - debug() << "refining.." << eom; - current_index_set.clear(); - update_index_set(cur); - cur.clear(); - add_instantiations(); - - if(variable_with_multiple_occurence_in_index) - { - debug() << "WARNING: some variable appears multiple times" << eom; - } - - if(current_index_set.empty()){ - debug() << "current index set is empty" << eom; - return D_SATISFIABLE; - } - - display_index_set(); - debug()<< "instantiating NOT_CONTAINS constraints" << eom; - for(unsigned i=0; i lemmas; - instantiate_not_contains(not_contains_axioms[i],lemmas); - for(unsigned j=0; j lemmas; + instantiate_not_contains(not_contains_axioms[i], lemmas); + for(unsigned j=0; j500) return "very long string"; if(n==0) return "\"\""; unsigned str[n]; - exprt val = get(arr); - if(val.id() == "array-list") { - for (size_t i = 0; i < val.operands().size()/2; i++) { - exprt index = val.operands()[i*2]; - unsigned idx = integer_of_expr(to_constant_expr(index)); + exprt val=get(arr); + if(val.id()=="array-list") + { + for(size_t i=0; i(str[i]); if(31::iterator it; - for (it = generator.symbol_to_string.begin(); it != generator.symbol_to_string.end(); ++it) - { - string_exprt refined = it->second; - const exprt &econtent = refined.content(); - const exprt &elength = refined.length(); - - exprt len = get(elength); - exprt arr = get_array(econtent, len); - - fmodel[elength] = len; - fmodel[econtent] = arr; - debug() << it->first << " = " << from_expr(it->second) - << " of length " << from_expr(len) <<" := " << eom - << from_expr(get(econtent)) << eom - << string_of_array(econtent,len) << eom; - } + for(auto it : generator.symbol_to_string) + { + string_exprt refined=it.second; + const exprt &econtent=refined.content(); + const exprt &elength =refined.length(); + + exprt len=get(elength); + exprt arr=get_array(econtent, len); + + fmodel[elength]=len; + fmodel[econtent]=arr; + debug() << it.first << "=" << from_expr(it.second) + << " of length " << from_expr(len) <<" := " << eom + << from_expr(get(econtent)) << eom + << string_of_array(econtent, len) << eom; + } - for(std::vector::iterator it = generator.boolean_symbols.begin(); - it != generator.boolean_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << from_expr(get(*it)) << eom; - fmodel[*it] = get(*it); + for(auto it : generator.boolean_symbols) + { + debug() << "" << it.get_identifier() << " := " + << from_expr(get(it)) << eom; + fmodel[it]=get(it); } - for(std::vector::iterator it = generator.index_symbols.begin(); - it != generator.index_symbols.end(); it++) { - debug() << "" << it->get_identifier() << " := " << from_expr(get(*it)) << eom; - fmodel[*it] = get(*it); + for(auto it : generator.index_symbols) + { + debug() << "" << it.get_identifier() << " := " + << from_expr(get(it)) << eom; + fmodel[it]=get(it); } debug() << "in check axiom, the model may be incomplete" << eom; std::vector< std::pair > violated; - debug() << "there are " << universal_axioms.size() << " universal axioms" << eom; - for (size_t i = 0; i < universal_axioms.size(); ++i) { - const string_constraintt &axiom = universal_axioms[i]; + debug() << "there are " << universal_axioms.size() + << " universal axioms" << eom; + for(size_t i=0; i new_axioms(violated.size()); // Checking if the current solution satisfies the constraints - for (size_t i = 0; i < violated.size(); ++i) { - - new_axioms[i] = universal_axioms[violated[i].first]; - - const exprt &val = violated[i].second; - const string_constraintt &axiom = universal_axioms[violated[i].first]; - - exprt premise(axiom.premise()); - exprt body(axiom.body()); - implies_exprt instance(premise, body); - debug() << "warning: we don't eliminate the existential quantifier" << eom; - replace_expr(axiom.get_univ_var(), val, instance); - if (seen_instances.insert(instance).second) { - add_lemma(instance); - } else debug() << "instance already seen" << eom; + for(size_t i=0; i string_refinementt::map_of_sum(const exprt &f) { +std::map string_refinementt::map_of_sum(const exprt &f) +{ // number of time the element should be added (can be negative) - std::map< exprt, int> elems; + std::map elems; - std::vector< std::pair > to_process; + std::vector > to_process; to_process.push_back(std::make_pair(f, true)); - while (!to_process.empty()) { - exprt cur = to_process.back().first; - bool positive = to_process.back().second; + while(!to_process.empty()) + { + exprt cur=to_process.back().first; + bool positive=to_process.back().second; to_process.pop_back(); - if (cur.id() == ID_plus) { + if(cur.id()==ID_plus) + { to_process.push_back(std::make_pair(cur.op1(), positive)); to_process.push_back(std::make_pair(cur.op0(), positive)); - } else if (cur.id() == ID_minus) { + } + else if(cur.id()==ID_minus) + { to_process.push_back(std::make_pair(cur.op1(), !positive)); to_process.push_back(std::make_pair(cur.op0(), positive)); - } else if (cur.id() == ID_unary_minus) { + } + else if(cur.id()==ID_unary_minus) + { to_process.push_back(std::make_pair(cur.op0(), !positive)); - } else { - if(positive) elems[cur] = elems[cur]+1; - else elems[cur] = elems[cur] - 1; + } + else + { + if(positive) + elems[cur]=elems[cur]+1; + else + elems[cur]=elems[cur]-1; } } return elems; } -exprt string_refinementt::sum_of_map(std::map & m, bool negated) { - exprt sum = refined_string_typet::index_of_int(0); - mp_integer constants = 0; +exprt string_refinementt::sum_of_map(std::map & m, bool negated) +{ + exprt sum=refined_string_typet::index_of_int(0); + mp_integer constants=0; - for (std::map::iterator it = m.begin(); - it != m.end(); it++) { + for(auto it : m) + { // We should group constants together... - const exprt &t = it->first; - int second = negated?(-it->second):it->second; - if(t.id() == ID_constant) + const exprt &t=it.first; + int second=negated?(-it.second):it.second; + if(t.id()==ID_constant) + { + std::string value(to_constant_expr(t).get_value().c_str()); + constants+=binary2integer(value, true)*second; + } + else + { + if(second!=0) { - std::string value(to_constant_expr(t).get_value().c_str()); - constants += binary2integer(value,true) * second; + if(second==-1) + { + if(sum==refined_string_typet::index_of_int(0)) + sum=unary_minus_exprt(t); + else + sum=minus_exprt(sum, t); + } + else if(second==1) + { + if(sum==refined_string_typet::index_of_int(0)) + sum=t; + else + sum=plus_exprt(sum, t); + } } - else + else { - if(second != 0) - { - if(second == -1) - { - if(sum == refined_string_typet::index_of_int(0)) sum = unary_minus_exprt(t); - else sum = minus_exprt(sum,t); - } - else if(second == 1) - { - if(sum == refined_string_typet::index_of_int(0)) sum = t; - else sum = plus_exprt(sum, t); - } - } - else - { - debug() << "in string_refinementt::sum_of_map:" - << " warning: several occurences of the same variable: " - << t.pretty() << eom; - variable_with_multiple_occurence_in_index = true; - if(second > 1) - for(int i = 0; i < second; i++) - sum = plus_exprt(sum, t); - else - for(int i = 0; i > second; i--) - sum = minus_exprt(sum, t); - } + debug() << "in string_refinementt::sum_of_map:" + << " warning: several occurences of the same variable: " + << t.pretty() << eom; + variable_with_multiple_occurence_in_index=true; + if(second>1) + { + for(int i=0; isecond; i--) + sum=minus_exprt(sum, t); + } } + } } - return plus_exprt(sum,constant_exprt(integer2binary(constants, STRING_SOLVER_INDEX_WIDTH), refined_string_typet::index_type())); + exprt index_const=from_integer(constants, refined_string_typet::index_type()); + return plus_exprt(sum, index_const); } -exprt string_refinementt::simplify_sum(const exprt &f) { - std::map map = map_of_sum(f); +exprt string_refinementt::simplify_sum(const exprt &f) +{ + std::map map=map_of_sum(f); return sum_of_map(map); } -exprt string_refinementt::compute_subst(const exprt &qvar, const exprt &val, const exprt &f) +exprt string_refinementt::compute_subst +(const exprt &qvar, const exprt &val, const exprt &f) { exprt positive, negative; // number of time the element should be added (can be negative) // qvar has to be equal to val - f(0) if it appears positively in f - // (ie if f(qvar) = f(0) + qvar) and f(0) - val if it appears negatively + // (ie if f(qvar)=f(0) + qvar) and f(0) - val if it appears negatively // in f. So we start by computing val - f(0). - std::map< exprt, int> elems = map_of_sum(minus_exprt(val,f)); - - bool found = false; - bool neg = false; // true if qvar appears negatively in f, ie positively in the elements - - for (std::map::iterator it = elems.begin(); - it != elems.end(); it++) { - const exprt &t = it->first; - if (t == qvar) { - if(it->second == 1 || it->second == -1){ - found = true; - neg = (it->second == 1); - } else { - debug() << "in string_refinementt::compute_subst:" - << " warning: occurences of qvar canceled out " << eom; - assert(it->second == 0); + std::map elems=map_of_sum(minus_exprt(val, f)); + + bool found=false; + bool neg=false; // true if qvar appears negatively in f (pos in elems) + + for(std::map::iterator it=elems.begin(), end=elems.end(); + it!=end; it++) + { + const exprt &t=it->first; + if(t==qvar) + { + if(it->second==1 || it->second==-1) + { + found=true; + neg=(it->second==1); + } + else + { + debug() << "in string_refinementt::compute_subst:" + << " warning: occurences of qvar canceled out " << eom; + assert(it->second==0); } elems.erase(it); } } - if (!found) { + if(!found) + { debug() << "string_refinementt::compute_subst: qvar not found" << eom; - debug() << "qvar = " << qvar.pretty() << eom - << "val = " << val.pretty() << eom - << "f = " << f.pretty() << eom; + debug() << "qvar=" << qvar.pretty() << eom + << "val=" << val.pretty() << eom + << "f=" << f.pretty() << eom; assert(false); } - return sum_of_map(elems,neg); + return sum_of_map(elems, neg); } -class find_qvar_visitor: public const_expr_visitort { +class find_qvar_visitort: public const_expr_visitort +{ private: const exprt &qvar_; public: - find_qvar_visitor(const exprt &qvar): qvar_(qvar) {} + explicit find_qvar_visitort(const exprt &qvar): qvar_(qvar) {} - void operator()(const exprt &expr) { - if (expr == qvar_) throw true; + void operator()(const exprt &expr) + { + if(expr==qvar_) throw true; } }; // Look for the given symbol in the index expression static bool find_qvar(const exprt index, const symbol_exprt & qvar) { - find_qvar_visitor v2(qvar); - try { + find_qvar_visitort v2(qvar); + try + { index.visit(v2); return false; - } catch (bool found) {return found;} + } + catch (bool found) {return found;} } void string_refinementt::initial_index_set (const std::vector & string_axioms) { - for (size_t i = 0; i < string_axioms.size(); ++i) + for(size_t i=0; i & cur) { - for (size_t i = 0; i < cur.size(); ++i) { +void string_refinementt::update_index_set(const std::vector & cur) +{ + for(size_t i=0; i to_process; to_process.push_back(axiom.body()); - while (!to_process.empty()) + while(!to_process.empty()) + { + exprt cur=to_process.back(); + to_process.pop_back(); + if(cur.id()==ID_index) { - exprt cur = to_process.back(); - to_process.pop_back(); - if (cur.id() == ID_index) - { - const exprt &s = cur.op0(); - const exprt &i = cur.op1(); - - bool has_quant_var = find_qvar(i,qvar); - - // if cur is of the form s[i] and no quantified variable appears in i - if(!has_quant_var) - { - current_index_set[s].insert(i); - index_set[s].insert(i); - } - else - { - // otherwise we add k-1 - exprt e(i); - replace_expr(qvar, - minus_exprt(axiom.upper_bound(), - refined_string_typet::index_of_int(1)),e); - current_index_set[s].insert(e); - index_set[s].insert(e); - } - - } + const exprt &s=cur.op0(); + const exprt &i=cur.op1(); + + bool has_quant_var=find_qvar(i, qvar); + + // if cur is of the form s[i] and no quantified variable appears in i + if(!has_quant_var) + { + current_index_set[s].insert(i); + index_set[s].insert(i); + } else - forall_operands(it, cur) - to_process.push_back(*it); + { + // otherwise we add k-1 + exprt e(i); + minus_exprt kminus1(axiom.upper_bound(), + refined_string_typet::index_of_int(1)); + replace_expr(qvar, kminus1, e); + current_index_set[s].insert(e); + index_set[s].insert(e); + } } + else + forall_operands(it, cur) + to_process.push_back(*it); + } } @@ -682,23 +724,27 @@ void string_refinementt::update_index_set(const exprt &formula) std::vector to_process; to_process.push_back(formula); - while (!to_process.empty()) { - exprt cur = to_process.back(); + while(!to_process.empty()) + { + exprt cur=to_process.back(); to_process.pop_back(); - if (cur.id() == ID_index) { - const exprt &s = cur.op0(); - const exprt &i = cur.op1(); - assert(s.type().id() == ID_array); - const exprt &simplified = simplify_sum(i); - if(index_set[s].insert(simplified).second) { - debug() << "adding to index set of " << from_expr(s) - << ": " << from_expr(simplified) << eom; - current_index_set[s].insert(simplified); + if(cur.id()==ID_index) + { + const exprt &s=cur.op0(); + const exprt &i=cur.op1(); + assert(s.type().id()==ID_array); + const exprt &simplified=simplify_sum(i); + if(index_set[s].insert(simplified).second) + { + debug() << "adding to index set of " << from_expr(s) + << ": " << from_expr(simplified) << eom; + current_index_set[s].insert(simplified); } - } else { - forall_operands(it, cur) { + } + else + { + forall_operands(it, cur) to_process.push_back(*it); - } } } } @@ -706,26 +752,31 @@ void string_refinementt::update_index_set(const exprt &formula) // Will be used to visit an expression and return the index used // with the given char array -class find_index_visitor: public const_expr_visitort { +class find_index_visitort: public const_expr_visitort +{ private: - const exprt &str_; + const exprt &str_; public: - find_index_visitor(const exprt &str): str_(str){} + explicit find_index_visitort(const exprt &str): str_(str) {} - void operator()(const exprt &expr) { - if (expr.id() == ID_index) { - const index_exprt &i = to_index_expr(expr); - if (i.array() == str_) - throw i.index(); + void operator()(const exprt &expr) + { + if(expr.id()==ID_index) + { + const index_exprt &i=to_index_expr(expr); + if(i.array()==str_) + throw i.index(); } } }; // Find an index used in the char array str -exprt find_index(const exprt & expr, const exprt & str) { - find_index_visitor v1(str); - try { +exprt find_index(const exprt & expr, const exprt & str) +{ + find_index_visitort v1(str); + try + { expr.visit(v1); return nil_exprt(); } @@ -734,54 +785,67 @@ exprt find_index(const exprt & expr, const exprt & str) { -exprt string_refinementt::instantiate(const string_constraintt &axiom, - const exprt &str, const exprt &val) +exprt string_refinementt::instantiate +(const string_constraintt &axiom, const exprt &str, const exprt &val) { assert(axiom.is_univ_quant()); - exprt idx = find_index(axiom.body(),str); + exprt idx=find_index(axiom.body(), str); if(idx.is_nil()) return true_exprt(); - if(!find_qvar(idx,axiom.get_univ_var())) return true_exprt(); + if(!find_qvar(idx, axiom.get_univ_var())) return true_exprt(); - exprt r = compute_subst(axiom.get_univ_var(), val, idx); + exprt r=compute_subst(axiom.get_univ_var(), val, idx); implies_exprt instance(axiom.premise(), axiom.body()); replace_expr(axiom.get_univ_var(), r, instance); // We are not sure the index set contains only positive numbers - exprt bounds = and_exprt(axiom.univ_within_bounds(),binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val)); + exprt bounds=and_exprt(axiom.univ_within_bounds(), + binary_relation_exprt + (refined_string_typet::index_zero(), ID_le, val)); replace_expr(axiom.get_univ_var(), r, bounds); - return implies_exprt(bounds,instance); + return implies_exprt(bounds, instance); } -void string_refinementt::instantiate_not_contains(const string_not_contains_constraintt & axiom, std::vector & new_lemmas) +void string_refinementt::instantiate_not_contains +(const string_not_contains_constraintt & axiom, std::vector & new_lemmas) { - exprt s0 = axiom.s0(); - exprt s1 = axiom.s1(); + exprt s0=axiom.s0(); + exprt s1=axiom.s1(); - debug() << "instantiate not contains " << from_expr(s0) << " : " << from_expr(s1) << eom; - expr_sett index_set0 = index_set[to_string_expr(s0).content()]; - expr_sett index_set1 = index_set[to_string_expr(s1).content()]; + debug() << "instantiate not contains " << from_expr(s0) << " : " + << from_expr(s1) << eom; + expr_sett index_set0=index_set[to_string_expr(s0).content()]; + expr_sett index_set1=index_set[to_string_expr(s1).content()]; - for(expr_sett::iterator it0 = index_set0.begin(); it0 != index_set0.end(); it0++) - for(expr_sett::iterator it1 = index_set1.begin(); it1 != index_set1.end(); it1++) - { - debug() << from_expr(*it0) << " : " << from_expr(*it1) << eom; - exprt val = minus_exprt(*it0, *it1); - exprt witness = generator.get_witness_of(axiom,val); - and_exprt prem_and_is_witness(axiom.premise(), - equal_exprt(witness, *it1)); - - not_exprt differ(equal_exprt(to_string_expr(s0)[*it0], - to_string_expr(s1)[*it1])); - exprt lemma = implies_exprt(prem_and_is_witness,differ); - - new_lemmas.push_back(lemma); - // we put bounds on the witnesses: 0 <= v <= |s0| - |s1| ==> 0 <= v+w[v] < |s0| && 0 <= w[v] < |s1| - exprt witness_bounds = implies_exprt - (and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,val), binary_relation_exprt(minus_exprt(to_string_expr(s0).length(),to_string_expr(s1).length()),ID_ge,val)), - and_exprt(binary_relation_exprt(refined_string_typet::index_zero(),ID_le,plus_exprt(val,witness)), - and_exprt(binary_relation_exprt(to_string_expr(s0).length(),ID_gt,plus_exprt(val,witness)), - and_exprt(binary_relation_exprt(to_string_expr(s1).length(),ID_gt,witness), - binary_relation_exprt(refined_string_typet::index_zero(),ID_le,witness))))); - new_lemmas.push_back(witness_bounds); - } + for(auto it0 : index_set0) + for(auto it1 : index_set1) + { + debug() << from_expr(it0) << " : " << from_expr(it1) << eom; + exprt val=minus_exprt(it0, it1); + exprt witness=generator.get_witness_of(axiom, val); + and_exprt prem_and_is_witness(axiom.premise(), + equal_exprt(witness, it1)); + + not_exprt differ(equal_exprt(to_string_expr(s0)[it0], + to_string_expr(s1)[it1])); + exprt lemma=implies_exprt(prem_and_is_witness, differ); + + new_lemmas.push_back(lemma); + // we put bounds on the witnesses: + // 0 <= v <= |s0| - |s1| ==> 0 <= v+w[v] < |s0| && 0 <= w[v] < |s1| + exprt zero=refined_string_typet::index_zero(); + binary_relation_exprt c1(zero, ID_le, plus_exprt(val, witness)); + binary_relation_exprt c2 + (to_string_expr(s0).length(), ID_gt, plus_exprt(val, witness)); + binary_relation_exprt c3(to_string_expr(s1).length(), ID_gt, witness); + binary_relation_exprt c4(zero, ID_le, witness); + + minus_exprt diff(to_string_expr(s0).length(), + to_string_expr(s1).length()); + + and_exprt premise(binary_relation_exprt(zero, ID_le, val), + binary_relation_exprt(diff, ID_ge, val)); + exprt witness_bounds=implies_exprt + (premise, and_exprt(and_exprt(c1, c2), and_exprt(c3, c4))); + new_lemmas.push_back(witness_bounds); + } } diff --git a/src/solvers/refinement/string_refinement.h b/src/solvers/refinement/string_refinement.h index 031f98ceb50..efbd323d026 100644 --- a/src/solvers/refinement/string_refinement.h +++ b/src/solvers/refinement/string_refinement.h @@ -7,8 +7,8 @@ Author: Alberto Griggio, alberto.griggio@gmail.com \*******************************************************************/ -#ifndef CPROVER_SOLVER_STRING_REFINEMENT_H -#define CPROVER_SOLVER_STRING_REFINEMENT_H +#ifndef CPROVER_SOLVERS_REFINEMENT_STRING_REFINEMENT_H +#define CPROVER_SOLVERS_REFINEMENT_STRING_REFINEMENT_H #include @@ -17,17 +17,14 @@ Author: Alberto Griggio, alberto.griggio@gmail.com #include #include -// This is to analyse the performances of the different steps -#include - class string_refinementt: public bv_refinementt { public: string_refinementt(const namespacet &_ns, propt &_prop); - ~string_refinementt() {}; + ~string_refinementt() {} - //Determine which language should be used - void set_mode(); + // Determine which language should be used + void set_mode(); // Should we use counter examples at each iteration? bool use_counter_example; @@ -41,12 +38,10 @@ class string_refinementt: public bv_refinementt static exprt is_positive(const exprt & x); private: - typedef bv_refinementt SUB; - std::chrono::high_resolution_clock::time_point start_time; - + // Base class + typedef bv_refinementt supert; protected: - typedef std::set expr_sett; virtual bvt convert_symbol(const exprt &expr); @@ -60,14 +55,13 @@ class string_refinementt: public bv_refinementt private: - string_constraint_generatort generator; // Simple constraints that have been given to the solver expr_sett seen_instances; - // + std::vector universal_axioms; - // + std::vector not_contains_axioms; int nb_sat_iteration; @@ -83,17 +77,17 @@ class string_refinementt: public bv_refinementt // for debugging void display_index_set(); - // Tells if there is a index in the index set where the same variable occurs several time. + // Tells if there is a index in the index set where the same variable occurs + // several times. bool variable_with_multiple_occurence_in_index; // Natural number expression corresponding to a constant integer - constant_exprt constant_of_nat(int i,typet t); + constant_exprt constant_of_nat(int i, typet t); void add_lemma(const exprt &lemma, bool add_to_index_set=true); - //void set_to(const exprt &expr, bool value); bool boolbv_set_equality_to_true(const equal_exprt &expr); - //bool set_equality_to_true(const equal_exprt &expr); + literalt convert_rest(const exprt &expr); // Instantiate forall constraints with index from the index set @@ -115,27 +109,24 @@ class string_refinementt: public bv_refinementt // Then substitutes [axiom.idx] with [r] in [axiom]. // axiom is not constant because we may record some information about // instantiation of existential variables. - exprt instantiate(const string_constraintt &axiom, const exprt &str, - const exprt &val); - - void instantiate_not_contains - (const string_not_contains_constraintt &axiom, - std::vector & new_lemmas); - - // For expressions f of a certain form, // - // returns an expression corresponding to $f^{−1}(val)$.// - // i.e. the value that is necessary for qvar for f to // - // be equal to val. // - // Takes an expression containing + and − operations // - // in which qvar appears exactly once. // - // Rewrites it as a sum of qvar and elements in list // - // elems different from qvar. // - // Takes e minus the sum of the element in elems. // + exprt instantiate + (const string_constraintt &axiom, const exprt &str, const exprt &val); + + void instantiate_not_contains( + const string_not_contains_constraintt &axiom, + std::vector & new_lemmas); + + // For expressions f of a certain form, returns an expression corresponding + // to $f^{−1}(val)$. + // i.e. the value that is necessary for qvar for f to be equal to val. + // Takes an expression containing + and − operations in which qvar appears + // exactly once. Rewrites it as a sum of qvar and elements in list elems + // different from qvar. Takes e minus the sum of the element in elems. exprt compute_subst(const exprt &qvar, const exprt &val, const exprt &f); // Rewrite a sum in a simple form: sum m_i * expr_i - std::map< exprt, int> map_of_sum(const exprt &f); - exprt sum_of_map(std::map &m,bool negated=false); + std::map map_of_sum(const exprt &f); + exprt sum_of_map(std::map &m, bool negated=false); // Simplify a sum (an expression with only plus and minus expr) exprt simplify_sum(const exprt &f); From ffdef62db44fc5d9ef8efadb0af32e6402cab287 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Tue, 20 Dec 2016 10:09:52 +0000 Subject: [PATCH 220/221] Adding more comments in refined_string_type and string_constraint Also some comments in string_constraint_generator.cpp and comments on the string_refinement module --- .../refinement/refined_string_type.cpp | 65 +++++++- src/solvers/refinement/refined_string_type.h | 13 +- src/solvers/refinement/string_constraint.cpp | 10 +- src/solvers/refinement/string_constraint.h | 12 +- .../string_constraint_generator.cpp | 38 ++++- .../refinement/string_constraint_generator.h | 148 +++++++++++++++--- src/solvers/refinement/string_refinement.cpp | 12 +- src/solvers/refinement/string_refinement.h | 7 +- 8 files changed, 253 insertions(+), 52 deletions(-) diff --git a/src/solvers/refinement/refined_string_type.cpp b/src/solvers/refinement/refined_string_type.cpp index cd10c95fbf6..1360fa9d3eb 100644 --- a/src/solvers/refinement/refined_string_type.cpp +++ b/src/solvers/refinement/refined_string_type.cpp @@ -1,7 +1,10 @@ /** -*- C++ -*- *****************************************************\ -Module: Type of string expressions for PASS algorithm - (see the PASS paper at HVC'13) +Module: Type for string expressions used by the string solver. + These string expressions contains a field `length`, of type + `index_type`, a field `content` of type `content_type`. + This module also defines function to recognise the C and java + string types. Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -10,6 +13,13 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com #include #include +/*******************************************************************\ + +Constructor: refined_string_typet::refined_string_typet + + Inputs: type of characters + +\*******************************************************************/ refined_string_typet::refined_string_typet(unsignedbv_typet char_type) :struct_typet() { @@ -25,6 +35,15 @@ refined_string_typet::refined_string_typet(unsignedbv_typet char_type) components()[1].type()=char_array; } +/*******************************************************************\ + +Function: refined_string_typet::is_c_string_type + + Inputs: a type + + Outputs: Boolean telling whether the type is that of C strings + +\*******************************************************************/ bool refined_string_typet::is_c_string_type(const typet &type) { if(type.id()==ID_struct) @@ -35,18 +54,36 @@ bool refined_string_typet::is_c_string_type(const typet &type) return false; } -bool refined_string_typet::is_java_string_type(const typet &type) +/*******************************************************************\ + +Function: refined_string_typet::is_java_string_pointer_type + + Inputs: a type + + Outputs: Boolean telling whether the type is that of java string pointers + +\*******************************************************************/ +bool refined_string_typet::is_java_string_pointer_type(const typet &type) { if(type.id()==ID_pointer) { pointer_typet pt=to_pointer_type(type); typet subtype=pt.subtype(); - return is_java_deref_string_type(subtype); + return is_java_string_type(subtype); } return false; } -bool refined_string_typet::is_java_deref_string_type(const typet &type) +/*******************************************************************\ + +Function: refined_string_typet::is_java_string_type + + Inputs: a type + + Outputs: Boolean telling whether the type is that of java string + +\*******************************************************************/ +bool refined_string_typet::is_java_string_type(const typet &type) { if(type.id()==ID_symbol) { @@ -61,6 +98,15 @@ bool refined_string_typet::is_java_deref_string_type(const typet &type) return false; } +/*******************************************************************\ + +Function: refined_string_typet::is_java_string_builder_type + + Inputs: a type + + Outputs: Boolean telling whether the type is that of java string builder + +\*******************************************************************/ bool refined_string_typet::is_java_string_builder_type(const typet &type) { if(type.id()==ID_pointer) @@ -76,6 +122,15 @@ bool refined_string_typet::is_java_string_builder_type(const typet &type) return false; } +/*******************************************************************\ + +Function: refined_string_typet::is_java_char_sequence_type + + Inputs: a type + + Outputs: Boolean telling whether the type is that of java char sequence + +\*******************************************************************/ bool refined_string_typet::is_java_char_sequence_type(const typet &type) { if(type.id()==ID_pointer) diff --git a/src/solvers/refinement/refined_string_type.h b/src/solvers/refinement/refined_string_type.h index de1ff1d7b46..e963fbc1c73 100644 --- a/src/solvers/refinement/refined_string_type.h +++ b/src/solvers/refinement/refined_string_type.h @@ -1,7 +1,10 @@ /** -*- C++ -*- *****************************************************\ -Module: Type of string expressions for PASS algorithm - (see the PASS paper at HVC'13) +Module: Type for string expressions used by the string solver. + These string expressions contains a field `length`, of type + `index_type`, a field `content` of type `content_type`. + This module also defines function to recognise the C and java + string types. Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -49,9 +52,9 @@ class refined_string_typet: public struct_typet static bool is_c_string_type(const typet & type); - static bool is_java_string_type(const typet & type); + static bool is_java_string_pointer_type(const typet & type); - static bool is_java_deref_string_type(const typet & type); + static bool is_java_string_type(const typet & type); static bool is_java_string_builder_type(const typet & type); @@ -68,7 +71,7 @@ class refined_string_typet: public struct_typet static inline bool is_unrefined_string_type(const typet & type) { return (is_c_string_type(type) - || is_java_string_type(type) + || is_java_string_pointer_type(type) || is_java_string_builder_type(type) || is_java_char_sequence_type(type)); } diff --git a/src/solvers/refinement/string_constraint.cpp b/src/solvers/refinement/string_constraint.cpp index 46c562146fc..d9725b2c408 100644 --- a/src/solvers/refinement/string_constraint.cpp +++ b/src/solvers/refinement/string_constraint.cpp @@ -1,11 +1,15 @@ /** -*- C++ -*- *****************************************************\ -Module: String constraints - (see the PASS paper at HVC'13) +Module: String constraints. + These are formulas talking about strings. We implemented two + forms of constraints: `string_constraintt` implements formulas + of the form $\forall univ_var \in [lb,ub[. premise => body$, + and not_contains_constraintt implements those of the form: + $\forall x in [lb,ub[. p(x) => \exists y in [lb,ub[. + s1[x+y] != s2[y]$. Author: Romain Brenguier, romain.brenguier@diffblue.com \*******************************************************************/ #include - diff --git a/src/solvers/refinement/string_constraint.h b/src/solvers/refinement/string_constraint.h index 631f7b94891..5fa578e452e 100644 --- a/src/solvers/refinement/string_constraint.h +++ b/src/solvers/refinement/string_constraint.h @@ -1,7 +1,12 @@ /** -*- C++ -*- *****************************************************\ -Module: String constraints - (see the PASS paper at HVC'13 +Module: String constraints. + These are formulas talking about strings. We implemented two + forms of constraints: `string_constraintt` implements formulas + of the form $\forall univ_var \in [lb,ub[. premise => body$, + and not_contains_constraintt implements those of the form: + $\forall x in [lb,ub[. p(x) => \exists y in [lb,ub[. + s1[x+y] != s2[y]$. Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -18,7 +23,7 @@ class string_constraintt: public exprt { public: // String constraints are of the form - // forall univ_var in [0,bound[. premise => body + // forall univ_var in [lower_bound,upper_bound[. premise => body // or premise => body inline const exprt &premise() const @@ -53,7 +58,6 @@ class string_constraintt: public exprt copy_to_operands(true_exprt(), true_exprt()); } - // Returns a new constraints with an universal quantifier added string_constraintt( const symbol_exprt &univ, const exprt &bound_inf, diff --git a/src/solvers/refinement/string_constraint_generator.cpp b/src/solvers/refinement/string_constraint_generator.cpp index b5f3dd6a08f..b8c6016d64c 100644 --- a/src/solvers/refinement/string_constraint_generator.cpp +++ b/src/solvers/refinement/string_constraint_generator.cpp @@ -1,7 +1,8 @@ /** -*- C++ -*- *****************************************************\ -Module: Constraint generation from string function calls - for the PASS algorithm (see the PASS paper at HVC'13) +Module: Generates string constraints to link results from string functions + with their arguments. This is inspired by the PASS paper at HVC'13 + which gives examples of constraints for several functions. Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -71,6 +72,19 @@ symbol_exprt string_constraint_generatort::fresh_boolean } +/*******************************************************************\ + +Function: string_constraint_generatort::add_axioms_for_string_expr + + Inputs: an expression of type string + + Outputs: a string expression that is link to the argument through + axioms that are added to the list + + Purpose: obtain a refined string expression corresponding to string + variable of string function call + +\*******************************************************************/ string_exprt string_constraint_generatort::add_axioms_for_string_expr (const exprt & unrefined_string) { @@ -144,7 +158,19 @@ string_exprt string_constraint_generatort::find_or_add_string_of_symbol return symbol_to_string[id]; } +/*******************************************************************\ +Function: string_constraint_generatort::add_axioms_for_function_application + + Inputs: an expression containing a function application + + Outputs: expression corresponding to the result of the function application + + Purpose: strings contained in this call are converted to objects of type + `string_exprt`, through adding axioms. Axioms are then added to + enforce that the result corresponds to the function application. + +\*******************************************************************/ exprt string_constraint_generatort::add_axioms_for_function_application (const function_application_exprt & expr) { @@ -159,7 +185,7 @@ exprt string_constraint_generatort::add_axioms_for_function_application else if(id==ID_cprover_string_length_func) return add_axioms_for_length(expr); else if(id==ID_cprover_string_equal_func) - return add_axioms_for_equal(expr); + return add_axioms_for_equals(expr); else if(id==ID_cprover_string_equals_ignore_case_func) return add_axioms_for_equals_ignore_case(expr); else if(id==ID_cprover_string_is_empty_func) @@ -1202,7 +1228,7 @@ string_exprt string_constraint_generatort::add_axioms_for_insert_float } -exprt string_constraint_generatort::add_axioms_for_equal +exprt string_constraint_generatort::add_axioms_for_equals (const function_application_exprt &f) { assert(f.type()==bool_typet() || f.type().id()==ID_c_bool); @@ -1720,7 +1746,7 @@ exprt string_constraint_generatort::add_axioms_for_index_of else assert(false); - if(refined_string_typet::is_java_string_type(c.type())) + if(refined_string_typet::is_java_string_pointer_type(c.type())) { string_exprt sub=add_axioms_for_string_expr(c); return add_axioms_for_index_of_string(str, sub, from_index); @@ -1788,7 +1814,7 @@ exprt string_constraint_generatort::add_axioms_for_last_index_of else assert(false); - if(refined_string_typet::is_java_string_type(c.type())) + if(refined_string_typet::is_java_string_pointer_type(c.type())) { string_exprt sub=add_axioms_for_string_expr(c); return add_axioms_for_last_index_of_string(str, sub, from_index); diff --git a/src/solvers/refinement/string_constraint_generator.h b/src/solvers/refinement/string_constraint_generator.h index ec9af1d3a97..f6e5e21378e 100644 --- a/src/solvers/refinement/string_constraint_generator.h +++ b/src/solvers/refinement/string_constraint_generator.h @@ -1,7 +1,8 @@ /** -*- C++ -*- *****************************************************\ -Module: Constraint generation from string function calls - for the PASS algorithm (see the PASS paper at HVC'13) +Module: Generates string constraints to link results from string functions + with their arguments. This is inspired by the PASS paper at HVC'13 + which gives examples of constraints for several functions. Author: Romain Brenguier, romain.brenguier@diffblue.com @@ -15,6 +16,10 @@ Author: Romain Brenguier, romain.brenguier@diffblue.com class string_constraint_generatort { public: + // This module keeps a list of axioms. It has methods which generate + // string constraints for different string funcitons and add them + // to the axiom list. + string_constraint_generatort(): mode(ID_unknown) { } void set_mode(irep_idt _mode) @@ -43,13 +48,15 @@ class string_constraint_generatort // Used to store information about witnesses for not_contains constraints std::map witness; - // inline exprt get_witness_of (const string_not_contains_constraintt & c, const exprt & univ_val) const { return index_exprt(witness.at(c), univ_val); } + // Generates fresh indexes symbol_exprt fresh_exist_index(const irep_idt &prefix); symbol_exprt fresh_univ_index(const irep_idt &prefix); + + // Generates a fresh Boolean variable symbol_exprt fresh_boolean(const irep_idt &prefix); // We maintain a map from symbols to strings. @@ -80,49 +87,105 @@ class string_constraint_generatort private: // The following functions add axioms for the returned value - // to be equal to the result of the function given as argument + // to be equal to the result of the function given as argument. + // They are not accessed directly from other classes: they call + // `add_axioms_for_function_application` which determines which of + // these methodes should be called. + + // Add axioms corresponding to the String.charAt java function exprt add_axioms_for_char_at(const function_application_exprt &f); + + // Add axioms corresponding to the String.codePointAt java function exprt add_axioms_for_code_point_at(const function_application_exprt &f); + + // Add axioms corresponding to the String.codePointBefore java function exprt add_axioms_for_code_point_before(const function_application_exprt &f); + + // Add axioms corresponding to the String.contains java function exprt add_axioms_for_contains(const function_application_exprt &f); - exprt add_axioms_for_equal(const function_application_exprt &f); + + // Add axioms corresponding to the String.equals java function + exprt add_axioms_for_equals(const function_application_exprt &f); + + // Add axioms corresponding to the String.equalsIgnoreCase java function exprt add_axioms_for_equals_ignore_case(const function_application_exprt &f); + + // Add axioms for accessing the data field of java strings exprt add_axioms_for_data(const function_application_exprt &f); + + // Add axioms corresponding to the String.hashCode java function + // The specification is partial: the actual value is not actualy computed + // but we ensure that hash codes of equal strings are equal. exprt add_axioms_for_hash_code(const function_application_exprt &f); + + // Add axioms corresponding to the String.isEmpty java function exprt add_axioms_for_is_empty(const function_application_exprt &f); + + // Add axioms corresponding to the String.isPrefix java function exprt add_axioms_for_is_prefix (const string_exprt &prefix, const string_exprt &str, const exprt & offset); exprt add_axioms_for_is_prefix (const function_application_exprt &f, bool swap_arguments=false); + + // Add axioms corresponding to the String.isSuffix java function exprt add_axioms_for_is_suffix (const function_application_exprt &f, bool swap_arguments=false); + + // Add axioms corresponding to the String.length java function exprt add_axioms_for_length(const function_application_exprt &f); + // Add axioms corresponding to the empty string "" string_exprt add_axioms_for_empty_string(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.setCharAt java function string_exprt add_axioms_for_char_set(const function_application_exprt &expr); + + // Add axioms for making a copy of a string string_exprt add_axioms_for_copy(const function_application_exprt &f); + + // Add axioms corresponding to the String.concat(String) java function string_exprt add_axioms_for_concat (const string_exprt & s1, const string_exprt & s2); string_exprt add_axioms_for_concat(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(I) java function string_exprt add_axioms_for_concat_int(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(J) java function string_exprt add_axioms_for_concat_long(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(Z) java function string_exprt add_axioms_for_concat_bool(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(C) java function string_exprt add_axioms_for_concat_char(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(D) java function string_exprt add_axioms_for_concat_double (const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.append(F) java function string_exprt add_axioms_for_concat_float(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.appendCodePoint(F) function string_exprt add_axioms_for_concat_code_point (const function_application_exprt &f); + + // Add axioms from a string constant string_exprt add_axioms_for_constant (irep_idt sval, int char_width, unsignedbv_typet char_type); - string_exprt add_axioms_for_constant - (irep_idt sval); + string_exprt add_axioms_for_constant(irep_idt sval); + + // Add axioms corresponding to the StringBuilder.delete java function string_exprt add_axioms_for_delete (const string_exprt &str, const exprt & start, const exprt & end); string_exprt add_axioms_for_delete(const function_application_exprt &expr); + + // Add axioms corresponding to the StringBuilder.deleteCharAt java function string_exprt add_axioms_for_delete_char_at (const function_application_exprt &expr); + // Add axioms corresponding to the StringBuilder.insert java functions string_exprt add_axioms_for_insert (const string_exprt & s1, const string_exprt & s2, const exprt &offset); string_exprt add_axioms_for_insert(const function_application_exprt &f); @@ -136,19 +199,31 @@ class string_constraint_generatort string_exprt add_axioms_for_insert_char_array (const function_application_exprt &f); - // Add axioms for conversion to string + // Add axioms for a string literal (calls `add_axioms_for_constant` with the + // right parameters) string_exprt add_axioms_from_literal(const function_application_exprt &f); + + // Add axioms corresponding to the String.valueOf(I) java function string_exprt add_axioms_from_int(const function_application_exprt &f); - // warning: This may only be correct for max_size=10 string_exprt add_axioms_from_int(const exprt &i, size_t max_size); + + // Add axioms corresponding to the Integer.toHexString(I) java function string_exprt add_axioms_from_int_hex(const exprt &i); string_exprt add_axioms_from_int_hex(const function_application_exprt &f); + + // Add axioms corresponding to the String.valueOf(J) java function string_exprt add_axioms_from_long(const function_application_exprt &f); string_exprt add_axioms_from_long(const exprt &i, size_t max_size); + + // Add axioms corresponding to the String.valueOf(Z) java function string_exprt add_axioms_from_bool(const function_application_exprt &f); string_exprt add_axioms_from_bool(const exprt &i); + + // Add axioms corresponding to the String.valueOf(C) java function string_exprt add_axioms_from_char(const function_application_exprt &f); string_exprt add_axioms_from_char(const exprt &i); + + // Add axioms corresponding to the StringBuilder.insert:(I[CII) java function string_exprt add_axioms_from_char_array(const function_application_exprt &f); string_exprt add_axioms_from_char_array( const exprt & length, @@ -156,84 +231,120 @@ class string_constraint_generatort const exprt & offset, const exprt & count); - // Warning: the specifications are only partial for some of the - // `index_of` functions + // Add axioms corresponding to the String.indexOf:(CI) java function exprt add_axioms_for_index_of( const string_exprt &str, const exprt & c, const exprt & from_index); + // Add axioms corresponding to the String.indexOf:(String;I) java function + // Warning: the specifications are only partial exprt add_axioms_for_index_of_string( const string_exprt &str, const string_exprt & substring, const exprt & from_index); + // Add axioms corresponding to the String.indexOf java functions + // Warning: the specifications are only partial for some of them exprt add_axioms_for_index_of(const function_application_exprt &f); + // Add axioms corresponding to the String.lastIndexOf:(String;I) java function + // Warning: the specifications are only partial exprt add_axioms_for_last_index_of_string( const string_exprt &str, const string_exprt & substring, const exprt & from_index); + // Add axioms corresponding to the String.lastIndexOf:(CI) java function exprt add_axioms_for_last_index_of( const string_exprt &str, const exprt & c, const exprt & from_index); + // Add axioms corresponding to the String.lastIndexOf java functions + // Warning: the specifications are only partial for some of them exprt add_axioms_for_last_index_of(const function_application_exprt &f); - // Warning: the specifications of these functions is only partial: + // Add axioms corresponding to the String.valueOf(F) java function + // Warning: the specifications of these functions is only partial string_exprt add_axioms_from_float(const function_application_exprt &f); string_exprt add_axioms_from_float( const exprt &f, bool double_precision=false); + // Add axioms corresponding to the String.valueOf(D) java function + // Warning: the specifications is only partial string_exprt add_axioms_from_double(const function_application_exprt &f); + // Add axioms corresponding to the String.replace java function string_exprt add_axioms_for_replace(const function_application_exprt &f); + + // Add axioms corresponding to the StringBuilder.setLength java function string_exprt add_axioms_for_set_length(const function_application_exprt &f); + // Add axioms corresponding to the String.substring java function // Warning: the specification may not be correct for the // case where the string is not long enough string_exprt add_axioms_for_substring (const string_exprt & str, const exprt & start, const exprt & end); string_exprt add_axioms_for_substring(const function_application_exprt &expr); + // Add axioms corresponding to the String.toLowerCase java function string_exprt add_axioms_for_to_lower_case (const function_application_exprt &expr); + + // Add axioms corresponding to the String.toUpperCase java function string_exprt add_axioms_for_to_upper_case (const function_application_exprt &expr); + + // Add axioms corresponding to the String.trim java function string_exprt add_axioms_for_trim(const function_application_exprt &expr); + // Add axioms corresponding to the String.valueOf([CII) function // Warning: not working correctly at the moment string_exprt add_axioms_for_value_of(const function_application_exprt &f); + // Add axioms for converting a integer representing a code point to a utf-16 + // string string_exprt add_axioms_for_code_point(const exprt &code_point); + + // Add axioms corresponding to the String.valueOf([C) java function string_exprt add_axioms_for_java_char_array(const exprt & char_array); + // Add axioms for an if expression that should return a string string_exprt add_axioms_for_if(const if_exprt &expr); + // Add axioms for a character litteral (of the form 'c') to a string exprt add_axioms_for_char_literal(const function_application_exprt &f); - // Warning: this function is underspecified + // Add axioms corresponding the String.codePointCount java function + // Warning: this function is underspecified, we do not compute the exact value + // but over approximate it. exprt add_axioms_for_code_point_count(const function_application_exprt &f); - // Warning: this function is underspecified - // shoudl return the index within this String that is offset from the given - // first argument by second argument code points. - // We approximate this by saying the result is + + // Add axioms corresponding the String.offsetByCodePointCount java function + // Warning: this function is underspecified, it should return the index within + // this String that is offset from the given first argument by second argument + // code points and we approximate this by saying the result is // between index + offset and index + 2 * offset exprt add_axioms_for_offset_by_code_point (const function_application_exprt &f); + + // Add axioms corresponding to the Integer.parseInt java function exprt add_axioms_for_parse_int(const function_application_exprt &f); + + // Add axioms corresponding to the String.toCharArray java function exprt add_axioms_for_to_char_array(const function_application_exprt &f); + // Add axioms corresponding to the String.compareTo java function exprt add_axioms_for_compare_to(const function_application_exprt &f); + // Add axioms corresponding to the String.intern java function // Warning: this does not work at the moment because of the way we treat // string pointers symbol_exprt add_axioms_for_intern(const function_application_exprt &f); - // Which language shoud be used + // Tells which language is used. C and Java are supported irep_idt mode; // assert that the number of argument is equal to nb and extract them @@ -253,6 +364,7 @@ class string_constraint_generatort // Pool used for the intern method std::map pool; + // Used to determine whether hashcode should be equal std::map hash; }; diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index aaf1964b2e1..d3dfdb56385 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -1,11 +1,12 @@ /** -*- C++ -*- *****************************************************\ - Module: String support via axiom instantiation - (see the PASS paper at HVC'13) +Module: String support via creating string constraints and progressively + instantiating the universal constraints as needed. + The procedure is described in the PASS paper at HVC'13. - Author: Alberto Griggio, alberto.griggio@gmail.com +Author: Alberto Griggio, alberto.griggio@gmail.com - \*******************************************************************/ +\*******************************************************************/ #include #include @@ -26,7 +27,6 @@ string_refinementt::string_refinementt(const namespacet &_ns, propt &_prop): void string_refinementt::set_mode() { debug() << "initializing mode" << eom; - // symbol_table.show(std::cout); symbolt init=ns.lookup(irep_idt("__CPROVER_initialize")); irep_idt mode=init.mode; debug() << "mode detected as " << mode << eom; @@ -164,8 +164,6 @@ decision_proceduret::resultt string_refinementt::dec_solve() for(std::size_t i=0; i Date: Tue, 20 Dec 2016 11:51:27 +0000 Subject: [PATCH 221/221] Removed unecessary use of a variable length array --- src/solvers/refinement/string_refinement.cpp | 22 ++++++++------------ 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/solvers/refinement/string_refinement.cpp b/src/solvers/refinement/string_refinement.cpp index d3dfdb56385..d39622c4d47 100644 --- a/src/solvers/refinement/string_refinement.cpp +++ b/src/solvers/refinement/string_refinement.cpp @@ -290,8 +290,11 @@ std::string string_refinementt::string_of_array unsigned n=integer_of_expr(to_constant_expr(size)); if(n>500) return "very long string"; if(n==0) return "\"\""; - unsigned str[n]; + + std::ostringstream buf; + buf << "\""; exprt val=get(arr); + if(val.id()=="array-list") { for(size_t i=0; i(integer_of_expr(to_constant_expr(value))); + if(31(str[i]); - if(31